我有一个2019-12-06T06:04:50.022461Z
格式的UTC日期时间,我想将其转换为dd-mm-yyyy hh:mm:ss
格式的可读日期时间。我无法以特定格式进行转换。任何帮助将不胜感激。谢谢
答案 0 :(得分:1)
您可以使用A
设置日期格式。检查以下内容:
template< class T1, class T2, template<class> class B1, class NA1>
答案 1 :(得分:1)
我假设您要在用户的时区中显示时间。正如您已经说过的那样,您的字符串使用UTC,很少有用户会乐于使用UTC读取时间。
DateTimeFormatter readableFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu HH:mm:ss");
String originalString = "2019-12-06T06:04:50.022461Z";
String readableString = Instant.parse(originalString)
.atZone(ZoneId.systemDefault())
.format(readableFormatter);
System.out.println(readableString);
为了示例,我在America / Sitka时区中运行了此代码。输出为:
05-12-2019 21:04:50
如果您确实要像原始字符串一样以UTC显示时间:
String readableString = OffsetDateTime.parse(originalString)
.format(readableFormatter);
06-12-2019 06:04:50
请勿使用当前接受的答案中使用的SimpleDateFormat
,TimeZone
和Calendar
类。它们的设计都不好,特别是SimpleDateFormat
是一个臭名昭著的麻烦制造者,也不能像字符串中那样解析秒的6位小数。这三个阶级也都已经过时了。相反,我使用的是java.time,这是现代的Java日期和时间API。与之合作真是太好了。该代码不仅更短,而且我认为您会发现阅读起来更清晰(无论是立即阅读还是习惯流利的风格)。
我正在利用您的原始字符串为ISO 8601格式的事实。 java.time的类将ISO 8601格式解析为默认格式,即没有任何显式格式化程序。
但是,出于绝大多数目的,您不希望从一种字符串格式转换为另一种字符串格式。在程序内部,将日期和时间保留为Instant
或其他适当的日期/时间对象。仅在界面中需要字符串时才转换为字符串。
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 2 :(得分:0)
您可以在Java 8中尝试使用
String dateString = "2019-12-06T06:04:50.022461Z";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneOffset.UTC);
TemporalAccessor date = fmt.parse(dateString);
Instant time = Instant.from(date);
DateTimeFormatter fmtOut = DateTimeFormatter.ofPattern("dd-mm-yyyy hh:mm:ss").withZone(ZoneOffset.UTC);
String newDateString = fmtOut.format(time);