如何在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);
预先感谢
答案 0 :(得分:3)
使用 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 代替了可怕的旧日期时间类。
特别是:
Instant
或OffsetDateTime
代替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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?