java - Java - 将日期字符串解析为具有特定日期格式的日期
问题描述
我有一个日期字符串“Wed Dec 02 00:00:00 ICT 2015”。我尝试使用 SimpleDateFormat 将此字符串转换为格式为“YYYY-mm-DD”的日期。代码如下所示:
Date date = new SimpleDateFormat("YYYY-mm-DD").parse("Wed Dec 02 00:00:00 ICT 2015");
但我有一个例外:
java.text.ParseException: Unparseable date: "Wed Dec 02 00:00:00 ICT 2015"
解决方案
大多数编程语言都有“日期/时间”表示的概念,它表示某个时间点并允许应用规则,例如时区和闰年/秒以及其他奇怪的应用。
在解析一个String
值的时候,你必须知道它的格式String
,让我们面对它,是什么3/3/3
意思?
Java 8 取代了现有的Date
/ Calendar
API,这是一个更丰富且不易出错的 API,您应该尽可能多地使用它。
第一步是构造一个DateTimeFormatter
代表所需输入格式的
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
有关说明符的更多详细信息,请参阅JavaDocs。
接下来,您要使用格式化程序解析文本...
String text = "Wed Dec 02 00:00:00 ICT 2015";
ZonedDateTime zdt = ZonedDateTime.parse(text, formatter);
System.out.println(zdt);
注意:我使用 a 是ZonedDateTime
因为我想保留时区信息,您可以使用 a LocalDateTime
,但这取决于您的潜在需求
这将打印2015-12-02T00:00+07:00[Asia/Bangkok]
我希望日期的格式为“YYYY-mm-DD”
一个重要的概念是,toString
日期对象的值与其底层表示无关,只表示对象的人类可读表示。
要将日期值格式化为其他内容,您需要使用另一个DateTimeFormatter
...
String formattedDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(zdt);
System.out.println(formattedDate);
并且将打印2015-12-02
推荐阅读
- smalltalk - Windows 上 Smalltalk (Pharo) 中的标准输入
- snakemake - 使用 snakemake 的 MissingOutputException 和延迟等待错误
- android - 如何在 Mac OS 上安装 ANDROID_SDK_ROOT?
- python - IndexError:列表索引超出范围。任何人都可以帮我解决这个 Python 代码吗?包括 numpy 和 pandas 的概念
- javascript - 正则表达式匹配两个单词之间的字符串,其中结束边界词是可选的
- vba - MS Access:如何通过 SQL 或 VBA 返回该表中具有“超链接”字段格式的所有表和字段名称?
- python - 处理大型数据集进行分析
- matlab - MATLAB fminunc lsqnonlin 强制迭代次数
- webgl - Webgl 2.0 中的 Msaa - 在 Quad 上执行 Msaa
- php - PHP foreach 循环两次插入最后一个元素