如何从ISO8601字符串中获取当前时区的时间



在我的sqlite数据库中,我有一个带有字段created_at的表,它将ISO8601中的时间存储为text。在与该表相对应的对象中,我有两个用于created_at属性的字段String date, String time。现在,在查询该表并创建相应的对象时,我一直在将ISO8601字符串转换为当前用户的时区日期(YYYY/MM/DD(、时间(XX:YY pm(。有人能帮我吗?我曾想过使用子字符串来拆分字符串,但后来ISO8601字符串的时区是UTC。

ISO8601字符串使用Instant.now((.toString((存储在数据库中

tldr:created_at=ISO8601时间字符串;需要从中提取当前用户的日期和时间部分。

阅读ISO 8601的维基百科页面。

java.time

捕捉UTC中的当前时刻。

Instant instant = Instant.now() ;

生成ISO 8601字符串。

String output = instant.toString() ;

结果字符串末尾的Z表示与UTC的偏移量为零小时分秒。

调整到特定的时区。

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

不幸的是,ISO 8601标准并没有定义时区中的格式。ZonedDateTime#toString方法使用类似于ISO8601的格式,但将时区名称附加在方括号中。这是一个明智的解决方案。

String output = zdt.toString() ; 

你的大部分问题都不清楚。我猜你想从ZonedDateTime中提取日期和时间部分。但我不确定使用这样的值来查询数据库是否有意义。但如果你坚持:

LocalDate ld = zdt.toLocalDate() ;
LocalTime lt = zdt.toLocalTime() ;

您可以为每个字符串获取一个ISO 8601字符串。

String ldOutput = ld.toString() ;
String ltOutput = lt.toString() ;

请注意,不需要您在问题中提到的字符串操作。

我想你可以在这里看到这个链接,你可能会找到一些答案。

但是举个例子,你可以在这里看到这个例子。我有一个String格式,并将其转换为Date对象。

DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
String string1 = "2001-07-04T12:08:56.235-0700";
Date result1 = df1.parse(string1);

相关内容

  • 没有找到相关文章