系统日期格式

System date format

有没有办法强制计算机使用 java 通过代码更改其日期格式?我的应用程序使用指定格式将日期存储在字符串中,并存储在磁盘上的文件中。选择的格式只影响字符串变量而不影响文件,因为它强制使用系统区域设置。我试图在 SimpleDateFormat() 中设置语言环境或更改默认语言环境,但没有成功。我不明白为什么系统设置会强制 String 遵循日期模式。任何澄清将不胜感激。

你的问题一点都不清楚。没有 "System date format" 这样的东西。

避免遗留日期时间 classes

与最早版本 Java 捆绑在一起的旧日期时间 classes 已被证明是麻烦、混乱和有缺陷的。避免 java.util.Date.CalendarSimpleDateFormat。这些现在是遗留的,被 java.time classes.

取代

ISO 8601

如果您将文件中的日期时间值作为文本序列化到磁盘,请使用标准 ISO 8601 格式。这些格式在不同文化中都是直观的、明确的,并且越来越受欢迎,包括在新的互联网和信息标准中。

java.time class 当 parsing/generating 日期时间值字符串时,默认情况下使用 ISO 8601 格式。

使用 Instant class.

以高达纳秒的分辨率获取 UTC 中的当前时刻
Instant instant = Instant.now();

生成一个字符串,将那一刻表示为标准 ISO 8601 格式的文本。

String output = instant.toString();

2016-12-04T06:12:13.455Z

易于再次解析回对象。

Instant instant = Instant.parse( "2016-12-04T06:12:13.455Z" );

通常最好使用 UTC,但如果需要,您可以将那个时刻调整为时区。

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
String outputZdt = zdt.toString();

2016-12-04T01:12:13.455-05:00[America/Montreal]

参见 live code at IdeOne.com


关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

Joda-Time project, now in maintenance mode,建议迁移到java.time。

要了解更多信息,请参阅 Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310

从哪里获得java.time classes?

  • Java SE 8 and SE 9 及以后
    • 内置。
    • 标准 Java API 的一部分,带有捆绑实施。
    • Java 9 添加了一些小功能和修复。
  • Java SE 6 and SE 7
  • Android
    • ThreeTenABP项目专门为Android改编了ThreeTen-Backport(上面提到的)。
    • 参见

ThreeTen-Extra 项目用额外的 class 扩展了 java.time。该项目是未来可能添加到 java.time.

的试验场