首页 > 解决方案 > Android - 根据格林威治标准时间设置时间数据

问题描述

如何根据用户的时间组织我保存在字符串中的时间数据?

例如; 默认数据(小时/分钟/秒)= 03:48:21

GMT + 2 的用户的此数据;

它应该显示为 02:48.21。

标签: javaandroidandroid-studio

解决方案


tl;博士

OffsetTime
.of(
    LocalTime.parse( "03:48:21" ) ,
    ZoneOffset.ofHours( 2 )
)
.withOffsetSameInstant​( 
    ZoneOffset.UTC 
)
.toString()

01:48:21Z

使用日期时间类型

如何组织我保存在字符串中的时间数据

不要使用 aString来存储其他类型。如果您有日期时间值,请使用日期时间类型。Java在 JSR 310 中定义的java.time类中提供了业界领先的日期时间类型。

LocalTime

如果03:48:21是一天中的某个时间,请使用LocalTime.

LocalTime localTime = LocalTime.parse( "03:48:21" ) ;

没有日期的时间在区域或偏移量中没有意义

…根据用户的时间?… GMT + 2 的用户数据 … 03:48:21 … 应显示为 02: 48.21

在我看来,从逻辑上讲,没有日期的时间不能放在时区offset-from-UTC的上下文中。

OffsetTime

java.time类提供该类OffsetTime。我假设这个类的存在只是为了支持标准 SQL,它提到了一个带偏移量的时间。但是,在我看来,这个概念毫无意义。但如果你坚持使用它,那就这样吧。

指定 aZoneOffset与您的LocalTime.

LocalTime lt = LocalTime.parse( "03:48:21" ) ;
ZoneOffset offset = ZoneOffset.ofHours( 2 ) ;
OffsetTime ot = OffsetTime.of( lt , offset ) ;
OffsetTime otUtc = ot.withOffsetSameInstant​( ZoneOffset.UTC ) ;

System.out.println( "ot.toString(): " + ot ) ;
System.out.println( "otUtc.toString(): " + otUtc ) ;

请参阅在 IdeOne.com 上实时运行的代码。

ot.toString(): 03:48:21+02:00

otUtc.toString(): 01:48:21Z

Z输出末尾的 代表 UTC,与 UTC 的偏移量为零时分秒,+00:00. 根据Z航空/军事传统,发音为“Zulu”。


推荐阅读