日期和时区转换[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日期和时区转换[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
如何在Java中将"E MMM dd HH:mm:ss z yyyy"
(String类型)转换为Date对象?我尝试过解析,但它提供了一个字符串输出。
DateFormat dfNy1 = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy", Locale.ROOT);
dfNy1.setTimeZone(TimeZone.getTimeZone("EST"));
final DateFormat df = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy", Locale.ROOT);
df.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(df.format(dfNy1.parse("Thu Dec 13 00:00:00 EST 2018")));
输出:Thu Dec 13 05:00:00 UTC 2018
我以String格式获取输出,但我需要与Date对象相同。
SimpleDateFormatter类的Format方法具有StringBuffer的返回类型,因此如果要格式化日期,它将始终返回字符串。
您可以阅读相同的java文档。 https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
当您将日期从一个模式格式化为另一个日期对象时,该字符串仍将保持不变。那么为什么要将对象转换为日期?
请不要再次格式化日期,它将以字符串格式返回。
DateFormat dfNy1 = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy", Locale.ROOT);
dfNy1.setTimeZone(TimeZone.getTimeZone("EST"));
try {
Date d = dfNy1.parse("Thu Dec 13 00:00:00 EST 2018");
System.out.println(s);`enter code here`
} catch (ParseException e1) {
e1.printStackTrace();
}
正如您已经发现的那样,您已经可以成功地将String
值解析为Date
对象:
DateFormat df = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy", Locale.ROOT);
Date date = df.parse("Thu Dec 13 00:00:00 EST 2018");
但是,由于Date
对象是“即时”,它不包含任何时区信息;它只不过是毫秒的容器,这意味着在解析时区信息后会丢失。见Java API doc for Date
:
Date类表示特定的瞬间时间,精度为毫秒
幸运的是,自Java 8以来,有一个新的时间API(参见package java.time
),它具有旧Date
或Calendar
API中缺少的许多功能。
要将String
值解析为包含时区的全功能日期/时间对象,请立即使用java.time.format.DateTimeFormatter
:
DateTimeFormatter format = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z yyyy", Locale.ROOT);
ZonedDateTime time = ZonedDateTime.parse("Thu Dec 13 00:00:00 EST 2018", dtf);
现在您可以直接使用此java.time.ZonedDateTime
,或将其转换为任何其他时区,保留“即时”:
ZonedDateTime gmtTime = time.withZoneSameInstant(ZoneId.of("GMT");
如果您只对当地时间感兴趣(跳过时区信息),请将其转换为LocalDateTime
:
LocalDateTime localTime = zdt.toLocalDateTime();
LocalDateTime localGmtTime = gmtTime.toLocalDateTime();
有关如何使用新API的更多信息,请查看此Tutorial about the Java time API。
以上是关于日期和时区转换[重复]的主要内容,如果未能解决你的问题,请参考以下文章