我在字符串中有小时和分钟,我希望将其转换为UTC时区以下是我的代码,但我错误的时间和分钟请帮助我....谢谢
ComboBox
答案 0 :(得分:1)
日历时间= Calendar.getInstance(TimeZone.getTimeZone(Utils.merchantTimeZone));
TimeZone
替换为ZoneId
。
ZoneId z = ZoneId.of( "America/Edmonton" ) ; // Or `Africa/Tunis`, `Europe/Paris`, etc.
Calendar
类被ZonedDateTime
取代。通过调用now
捕获当前时刻。
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
SimpleDateFormat sdf = new SimpleDateFormat(“ dd / MM / yyyy HH:mm:ss z”);
更好地自动本地化。要本地化,请指定:
FormatStyle
来确定字符串应该是多长时间或缩写。Locale
确定:
代码:
FormatStyle style = FormatStyle.LONG ;
Locale locale = new Locale( "en" , "IN" ) ; // English in India.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( style ).withLocale( locale ) ;
String output = zdt.format( f ) ;
2019年7月26日格林尼治标准时间-06:00下午7:28:36
如果您想对格式格式进行硬编码,请在StackOverflow中搜索DateTimeFormatter.ofPattern
。这已经被覆盖了很多次。
rawTime = time.get(Calendar.HOUR)+“” + time.get(Calendar.MINUTE);
如果您只需要时间部分而不包含日期和时区,请提取LocalTime
。
LocalTime lt = zdt.toLocalTime() ;
如果您只需要小时和分钟而不用秒和小数秒,请truncate。
LocalTime lt = zdt.toLocalTime().truncatedTo( ChronoUnit.MINUTES ) ;
我想将其转换为UTC时区
您的问题的这一部分不清楚。如果要从某个区域进行调整以在UTC中看到相同的时刻,只需将其转换为OffsetDateTime
对象,然后使用ZoneOffset.UTC
常数调整为UTC。
OffsetDateTime odt = zdt.toOffsetDateTime() ;
OffsetDateTime odtUtc = odt.withOffsetSameInstant( ZoneOffset.UTC ) ;
带有时区的ZonedDateTime
和带有UTC偏移量的OffsetDateTime
有什么区别?偏移量仅是小时-分钟-秒的数量,仅此而已。时区多了 个。时区是特定区域的人们过去,现在和将来对偏移量的更改的历史记录。
当我将0830(Asia / Calcutta)传递给rawTime时,我得到了1400,这不是适当的UTC小时
显然您要指定日期中的一天中的时间。
首先获取今天的日期。
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
LocalDate ld = LocalDate.now( z ) ; // Current date as seen in India right now.
指定您的时间。
LocalTime lt = LocalTime.of( 8 , 30 ) ;
将所有三个部分组合起来得到ZonedDateTime
。如果该日期在该区域的该日期无效,则ZonedDateTime
将进行调整。
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
zdt.toString():2019-07-27T08:30 + 05:30 [亚洲/加尔各答]
要在UTC中查看同一时刻,请提取Instant
。根据定义,Instant
类始终使用UTC。
Instant instant = zdt.toInstant() ;
instant.toString():2019-07-27T03:00:00Z
注意一天中的时间。在这一天,印度比世界协调时间早五个半小时。因此,每天的时间比世界标准时间上午3点少5.5小时。
是否可以将23:00(Asia / Calcutta)转换为UTC小时
是的,类似于上面的代码。在这里,我们也称为ZonedDateTime::with
。
ZonedDateTime
.now(
ZoneId.of( "Asia/Kolkata" )
)
.with(
LocalTime.of( 23 , 0 )
)
.toInstant()
.toString()
2019-07-27T17:30:00Z
再次,在这一天,印度比世界协调时间早五个半小时。因此,从晚上11点开始将时钟的时间倒退5.5小时,表示下午5:30。
此处看到的类内置于Java 8和更高版本以及Android 26和更高版本中。
答案 1 :(得分:0)
我建议您在代码中添加以下行:
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
作为一种资源,我正在寻找Affe给出的以下主题答案:点击here
修改:类TimeZone documentation。此外,这是Jenkov here
的一个非常好的教程