在Java中将字符串小时和分钟转换为UTC

时间:2015-10-13 08:58:38

标签: android

我在字符串中有小时和分钟,我希望将其转换为UTC时区以下是我的代码,但我错误的时间和分钟请帮助我....谢谢

ComboBox

2 个答案:

答案 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。

diagram of date-time types in Java (both legacy & modern) and in standard SQL


此处看到的类内置于Java 8和更高版本以及Android 26和更高版本中。

答案 1 :(得分:0)

我建议您在代码中添加以下行:

sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

作为一种资源,我正在寻找Affe给出的以下主题答案:点击here

修改:类TimeZone documentation。此外,这是Jenkov here

的一个非常好的教程