系统日期格式

时间:2016-12-04 05:26:31

标签: java file date-format

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

1 个答案:

答案 0 :(得分:1)

你的问题一点也不清楚。没有“系统日期格式”这样的东西。

避免遗留日期时间类

与最早版本的Java捆绑在一起的旧日期时间类已被证明是麻烦,混乱和有缺陷的。避免使用java.util.Date.CalendarSimpleDateFormat。这些现在已经遗留下来,取而代之的是java.time类。

ISO 8601

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

在解析/生成日期时间值字符串时,java.time类默认使用ISO 8601格式。

使用Instant类以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 [美国/蒙特利尔]

请参阅live code at IdeOne.com

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。