我正在尝试更改格式Date
对象,我尝试这样做:
for(Date date : dates){
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
String formatterDate = formatter.format(date);
Date d = formatter.parse(formatter.format(date));
}
但这并没有任何影响d
对象,它仍然是旧格式,无法真正理解为什么会这样。
请尝试区分两个概念:您的数据和向用户呈现的数据(或用于其他目的的格式化,例如包含在 JSON 中)。一个int
保存值 7 可以表示为(格式化为)7、07、007 或 +7,同时仍然只保存相同的值而没有任何格式信息 — 格式位于int
。同样,一个Date
保存一个时间点,它可以呈现为(格式化为)“June 1st 2017, 12:46:01.169”、“2017/06/01”或“1 Jun 2017”,同时仍然保留相同的值而不进行任何格式化信息——格式位于Date
.
根据您的要求,一种选择是将日期存储为Date
(或者更好的是,现代日期和时间类之一的实例,例如LocalDate
)并保留一个格式化程序,以便您可以在每次需要向用户显示它时对其进行格式化。如果这不起作用并且您需要store特定格式的日期,然后将其存储为String
.
Java 8 (7, 6) 日期和时间 API
现在我一直在评论中抱怨如何使用较新的 Java 日期和时间类,因此不向您展示它们的工作原理可能是不公平的。问题试图格式化为yyyy-MM-dd
,我们可以用下面的代码来完成。
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("uuuu/MM/dd");
for (LocalDate date : localDates) {
String formatterDate = date.format(dateFormatter);
System.out.println(formatterDate);
}
在一次运行中我得到了
2017/05/23
2017/06/01
如果列表中的对象有其他类型LocalDate
,大多数其他较新的日期和时间类型可以使用相同的方式以完全相同的方式格式化DateTimeFormatter
. Instant
在这方面有点特别,因为它不包含日期,但你可以这样做myInstant.atZone(ZoneId.of("Europe/Oslo")).format(dateFormatter)
获取当时/将在奥斯陆时区的日期。
现代类是在 Java 8 中引入的,并在 Java 9 中得到了一些增强。它们已向后移植到 Java 6 和 7三十向后移植 http://www.threeten.org/threetenbp/并有针对 Android 的特别版本,三十ABP https://github.com/JakeWharton/ThreeTenABP。所以我真的认为你没有理由不喜欢在你自己的代码中使用它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)