如何在Java中更改日期和时间格式
我知道这是一个简单的问题,但我应该使用什么日期和时间格式来显示此输出如何在Java中更改日期和时间格式,java,date,time,Java,Date,Time,我知道这是一个简单的问题,但我应该使用什么日期和时间格式来显示此输出 2019-02-06T3:26:40+08:00 我正在使用java.time。 我使用了LocalDateTime,但它只输出2020-10-06T16:40:04,没有+08:00 我只使用这个: LocalDateTime myObj = LocalDateTime.now(); System.out.println(myObj); 我不知道如何像上面的例子那样格式化。tl;博士 //以UTC的特定偏移量获取当前时间
2019-02-06T3:26:40+08:00
我正在使用java.time。
我使用了LocalDateTime
,但它只输出2020-10-06T16:40:04,没有+08:00
我只使用这个:
LocalDateTime myObj = LocalDateTime.now();
System.out.println(myObj);
我不知道如何像上面的例子那样格式化。tl;博士
//以UTC的特定偏移量获取当前时间
OffsetDateTime OffsetDateTime=OffsetDateTime.now(小时的区域偏移量(8));
//定义输出模式
字符串模式=“uuu-MM-dd'T'H:MM:ssxxx”;
//并使用已定义模式的格式化程序打印一些结果
System.out.println(“使用模式格式化”
+图案
+ ": "
+格式(模式(pattern)的DateTimeFormatter.of);
将输出类似于此行的内容(至少时间可能会不同):
格式为uuu-MM-dd'H:MM:ssxxx:2020-10-06T17:02:49+08:00
代码有问题:
(这不是与Java相关的功能问题,但在这里仍然是一个问题,您可以对其进行编辑)
LocalDateTime
,它不包含任何有关偏移量或时区的信息
LocalDateTime
的toString()
方法,只需在以下代码(注释中的代码)中打印实例即可:
LocalDateTime myObj=LocalDateTime.now();
系统输出打印LN(myObj);
输出一个字符串
如2020-10-06T16:40:04
,而不输出所需的+08:00
您可以使用LocalDateTime
的实例和所需的ZoneOffset
创建OffsetDateTime
,如
LocalDateTime localNow=LocalDateTime.now();
OffsetDateTime OffsetDateTime=OffsetDateTime.of(localNow,ZoneOffset.of小时(8));
System.out.println(offsetDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
它还使用预定义的输出模式,该模式与所需模式略有不同(秒与偏移之间显示秒的分数)
但请注意,在某些情况下,这种方法可能会返回错误的时间点(请参见本答案下方@OleV.V.的评论)。
如果您确定运行代码的每个系统都有并且将始终具有偏移量为+08:00
的时区设置,则可以使用OffsetDateTime.now()
,而无需显式添加ZoneOffset
,也可以通过OffsetDateTime nowExplicitSystemOffset=OffsetDateTime.now明确使用系统默认值(ZoneId.systemDefault());
我建议看一看
示例输出:
2020-10-07T20:50:11.758582Z
抵销日期时间
使用OffsetDateTime
代替LocalDateTime
:
OffsetDateTime myObj = OffsetDateTime.now(ZoneId.systemDefault());
System.out.println(myObj);
我刚才在亚洲/香港时区运行了此程序。输出为:
2020-10-07T03:25:03.254761+08:00
您要求的格式是ISO 8601。java、time类通常从其toString
方法打印ISO 8601格式。LocalDateTime
对象不包括任何偏移量或时区。OffsetDateTime
,顾名思义,确实包括UTC偏移量,例如+08:00
,因此也会打印它来自到字符串()
严格来说,没有必要将ZoneId.systemDefault()
作为参数传递给now()
。如果忽略它,您将得到相同的结果。由于当前时间取决于时区,我总是希望明确说明我使用的时区,因此我和读者都知道我做出了有意识的选择
链接
- 解释如何使用java.time
java.util
或java.time
或其他什么?我使用java.time然后准备一个DateTimeFormatter
…哪个类保存您的日期时间值?一个OffsetDateTime
或一个ZoneDateTime
?请显示一些代码行,例如那些初始化的代码object.LocalDateTime myObj=LocalDateTime.now();System.out.println(myObj);@proxysm04感谢您提供了很多好的额外信息。在问题本身中这样做总比在注释中好(只是这次我为您粘贴了它)。这是正确的一半。它给出的输出类似于2020-10-06T17:33:34.597702Z
,这是ISO 8601格式,与所要求的格式类似。我猜OP还需要问题示例中给出的+08:00
的偏移量。回答得好!对于未来的访问者:OffsetDateTime.of的替代方案(localNow,ZoneOffset.of Hours(8))可以是localNow.atOffset(ZoneOffset.of Hours(8))
。使用您觉得自然的选项。这里有很好的信息。LocalDateTime.now()
不带参数,后跟OffsetDateTime.of(localNow,ZoneOffset.of Hours(8))
是非常危险的。如果代码恰好在JVM上运行,并且时区设置与预期的+08:00偏移量不一致,那么您将得到一个错误的时间点,而没有任何错误的迹象。请使用例如OffsetDateTime.now(ZoneOffset.of Hours(8))
@OleV.V。这是一个非常有趣的点(我以前没有考虑过)。还有一个很好的答案!<代码>维基百科>代码>链接是非常翔实的,每个人都希望能对日期时间有一个很好的理解。
OffsetDateTime myObj = OffsetDateTime.now(ZoneId.systemDefault());
System.out.println(myObj);