java - Android - 根据格林威治标准时间设置时间数据
问题描述
如何根据用户的时间组织我保存在字符串中的时间数据?
例如; 默认数据(小时/分钟/秒)= 03:48:21
GMT + 2 的用户的此数据;
它应该显示为 02:48.21。
解决方案
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”。
推荐阅读
- reactjs - 如何将图像插入状态(React)
- reactjs - 在 React Bootstrap 中居中模式标题和按钮
- javascript - 有没有办法使用 HTML/CSS/JavaScript 使用较大图像的坐标(在第二个图像下)重叠 2 个图像?
- c# - 读取 JSON 文件时 Keyvaluepair 值为 0
- mysql - 在 SQL 查询中获取列定义不明确的错误
- node.js - Nginx 代理 + NodeJS WebSocket + >17KB 消息。没有交通。谁是罪魁祸首?
- java - 随机生成对象的问题
- angular - MSAL-angular 要求额外的权限
- javascript - 日期选择器和选择的高度相同吗?
- json - flatten_json 给了我一长串列和一行而不是所需的数据框结构