如何在Java中以另一种数据对象格式转换Date对象格式?(无字符串)

时间:2017-04-14 13:14:36

标签: java date google-app-engine

我知道这可能是一个复制的问题,但我想解析一个字符串以将其转换为Date对象。我可以通过这样做来实现:

SimpleDateFormat parser = new SimpleDateFormat("yyyy-M-d (HH:mm:ss.S)"); Date date = parser.parse(propertiesvalue[i]);

它以这种格式返回“日期”:Fri Jan 30 13:55:00 CET 2015 但我想返回类似于:2015-01-30(13:55:00.00)数据对象(不作为字符串对象)。我需要它在本地Google数据存储区中插入日期。

1 个答案:

答案 0 :(得分:0)

String!= datetime

不要将日期时间对象与可能代表其值的字符串混淆。

日期时间对象没有格式。日期时间格式代表片刻。日期时间对象可以生成字符串。可以通过解析字符串来创建日期时间对象。但是日期时间对象和字符串总是分开且不同的。

避免遗留类

你正在使用现在遗留下来的麻烦的旧日期时间类,取而代之的是java.time类。

使用java.time

Instant instant = Instant.now();               // Current moment in UTC
ZoneId z = ZoneId.of( "Pacific/Auckland" );  
ZonedDateTime zdt = instant.atZone( z );       // Same moment viewed as wall-clock time of particular region.

生成一个字符串,以某种格式表示该对象的值。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-M-d (HH:mm:ss.S)" , Locale.US );
String output = zdt.format( f );

转储到控制台。

System.out.println( "instant.toString(): " + instant );  // Standard ISO 8601 format.
System.out.println( "zdt.toString(): " + zdt );          // Standard ISO 8601 format.
System.out.println( "output: " + output );               // Custom format.

请参阅此code run live at IdeOne.com

  

instant.toString():2017-04-15T06:00:58.521Z

     

zdt.toString():2017-04-15T18:00:58.521 + 12:00 [太平洋/奥克兰]

     

输出:2017-4-15(18:00:58.5)

关于java.time

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

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

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

从哪里获取java.time类?