如何在Java中将UTC时间格式转换为日期
我必须调用一个web服务,该服务需要一个日期字段,但他们希望它的格式为YYYY MM DDThh:MM:ss.sssZ。我该怎么做 我尝试了以下方法如何在Java中将UTC时间格式转换为日期,java,date,utc,Java,Date,Utc,我必须调用一个web服务,该服务需要一个日期字段,但他们希望它的格式为YYYY MM DDThh:MM:ss.sssZ。我该怎么做 我尝试了以下方法 OffsetDateTime transactionTime = OffsetDateTime.now(ZoneOffset.UTC); Date.from(transactionTime.toInstant()); 但这不起作用。交易时间为2021-06-01T15:11:09.942843400Z,但Date.from将其转换为美国东部夏令
OffsetDateTime transactionTime = OffsetDateTime.now(ZoneOffset.UTC);
Date.from(transactionTime.toInstant());
但这不起作用。交易时间为2021-06-01T15:11:09.942843400Z,但Date.from将其转换为美国东部夏令时2021年6月1日星期二11:11:09 顺便说一句,我使用的是Java11
Instant.now().toString()
看到那个密码了吗
2021-06-01T15:21:16.783779Z
该格式在标准中定义。末端的Z
表示与UTC的偏移量为零小时分秒。发音为“祖鲁”
用于表示UTC中的某个时刻
从文本到对象的另一个方向
Instant.parse( "2021-06-01T15:21:16.783779Z" )
如果您只需要毫秒,您可以通过删除任何微秒和纳秒
切勿使用旧版Date
类。仅使用java.time类。使用DateTimeFormatter
格式化日期时间对象
输出:
2021-06-01T15:49:45.198Z
2021-06-01T15:49:45.198Z
从了解有关现代日期时间API的更多信息
如果我想使用java.util.Date
,该怎么办?
出于任何原因,如果需要将此OffsetDateTime
对象转换为java.util.Date
对象,可以按如下操作:
Date date = Date.from(transactionTime.toInstant());
请注意,java.util.Date
对象不像;相反,它表示自称为“历元”的标准基准时间(即1970年1月1日00:00:00 GMT)起的毫秒数。由于Date
没有时区信息,它应用JVM的时区返回Date#toString
的值,格式为EEE MMM dd HH:mm:ss z yyyyy
,根据该毫秒值计算得出。如果需要以不同的格式和时区打印日期时间,则需要使用SimpleDateFormat
,并将所需格式和时区设置为适用的格式,例如
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String strDate = sdf.format(date);
System.out.println(strDate);
输出:
2021-06-01T15:49:45.198Z
2021-06-01T15:49:45.198Z
其他一些重要注意事项:
2021-06-01T15:49:45.198Z
2021-06-01T15:49:45.198Z
java.util
Date-Time API及其格式化APISimpleDataFormat
已经过时,并且容易出错。建议完全停止使用,并切换到*YYYY-MM-DDThh:MM:ss.sssZ
中使用的大多数符号都是错误的。检查和的文档页中的符号说明*无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。
2021-06-01T15:11:09.942843400Z(祖鲁,格林威治时间)是美国东部夏令时2021-06-01T11:11:09.942843400。在不同的时区,它是同一个瞬间。“Date.from将其转换为Tue Jun 01 11:11:09 EDT 2021”-否,
Date。from
将其转换为Date
对象,该对象不是字符串。如果您需要以特定的方式格式化日期
对象,有多种方法(例如SimpleDataFormat
)。java.util.Date
没有时区的概念。字符串,Tue Jun 01 11:11:09 EDT 2021
表示时区中的日期时间。由于Date
没有时区信息,它应用JVM的时区返回Date#toString
的值。Date
也不能有格式。是什么让你认为你想要日期
?该类设计拙劣且过时很久,而且web服务不直接使用Date
对象,所以您不应该想要一个。最好坚持使用您的OffsetDateTime
。