Android-使用时区转换当前日期和时间

时间:2018-09-27 01:38:47

标签: java android datetime simpledateformat

如何在Android上以这种格式 2018-09-21T01:56:57.926986 + 00:00 转换当前时间?我正在使用DateFormat,但不知道如何在其中添加时区。这是获取当前日期和时间时使用的代码

DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
                                    Date date = new Date();
                                    String curDate = dateFormat.format(date);

预先感谢

1 个答案:

答案 0 :(得分:3)

tl; dr

使用 java.time 类。

OffsetDateTime            // Represent a moment as a date, a time-of-day, and an offset-from-UTC (a number of hours, minutes, seconds) with a resolution as fine as nanoseconds.
.now(                     // Capture the current moment. 
    ZoneOffset.UTC.       // Specify your desired offset-from-UTC. Here we use an offset of zero, UTC itself, predefined as a constant.
)                         // Returns a `OffsetDateTime` object.
.format(                  // Generate text in a `String` object representing the date-time value of this `OffsetDateTime` object.
    DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSSSSxxxxx" , Locale.US )
)                         // Returns a `String` object.
  

2018-09-27T05:39:41.023987 + 00:00

或者,将Z用于UTC。

Instant.now().toString()
  

2018-09-27T05:39:41.023987Z

java.time

现代方法使用 java.time 代替了可怕的旧日期时间类。

特别是:

  • 使用InstantOffsetDateTime代替java.util.Date
  • 使用DateTimeFormatter代替`SimpleDateFormat。

以UTC获取当前时间。生成文本时,我们使用OffsetDateTime类而不是Instant类来更灵活地设置格式。

ZoneOffset offset = ZoneOffset.UTC;
OffsetDateTime odt = OffsetDateTime.now( offset );

定义格式设置模式以匹配所需的输出。请注意,内置的格式设置模式使用Z作为+00:00的标准速记。 Z的意思是UTC,发音为“ Zulu”。这种Zulu时间格式非常普遍。我建议对Z使用此类格式。但是您明确要求使用从UTC偏移量为零的长版本,因此我们必须使用自定义DateTimeFormatter对象。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSSSSxxxxx" , Locale.US );
String output = odt.format( f );
  

2018-09-27T05:39:41.023987 + 00:00

仅供参考,此处讨论的格式符合ISO 8601标准。


关于 java.time

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

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

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?