java.time
我想提供现代答案。并给你一个建议:与其复制会给你的东西Date.toString()
,不如为相关语言环境中的用户使用内置格式:
String isoString = "2013-07-17T03:58:00.000Z";
String humanReadable = Instant.parse(isoString)
.atZone(userTimeZone)
.format(localizedFormatter);
System.out.println(humanReadable);
在我的电脑上打印
17 July 2013 at 09.28.00 IST
我的代码片段使用了几个常量
private static final ZoneId userTimeZone = ZoneId.of("Asia/Kolkata");
private static final DateTimeFormatter localizedFormatter = DateTimeFormatter
.ofLocalizedDateTime(FormatStyle.LONG)
.withLocale(Locale.getDefault(Locale.Category.FORMAT));
当withLocale
我们只传递默认格式语言环境时,调用是多余的。如果您的用户需要不同的语言环境,我将其放入其中,以便您可以提供一个明确的语言环境。它还具有明确表明结果取决于语言环境的好处,以防阅读您的代码的人没有想到这一点。
我正在使用java.time
现代 Java 日期和时间 API。它比过时的Date
、TimeZone
臭名昭著的麻烦DateFormat
和SimpleDateFormat
. 您的字符串符合 ISO 8601 标准,现代类将其解析为默认格式,即没有任何显式格式化程序。
与日期给你的格式相同
当然,如果您需要,您可以使用与老式相同的格式Date
。只需用这个替换上面的格式化程序:
private static final DateTimeFormatter asUtilDateFormatter
= DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
现在我们得到:
Wed Jul 17 09:28:00 IST 2013
链接到教程
java.time
在Oracle 教程中阅读有关使用的更多信息和/或查找其他资源。