当前位置: 首页 > 知识库问答 >
问题:

将任意时区的日期和时间转换为UTC时区

田意致
2023-03-14

>

如何将IST转换为UTC,即(至2014年5月14日18:30:00)

我的代码

DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss");

formatter.setTimeZone(TimeZone.getTimeZone("IST"));  //here set timezone

System.out.println(formatter.format(date));  
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));  //static UTC timezone

System.out.println(formatter.format(date));  
String str = formatter.format(date);
Date date1  = formatter.parse(str);
System.out.println(date1.toString());

>

  • 如果用户从任何区域输入相同的日期,则将获得UTC时间(例如:从澳大利亚输入,然后是2014年5月15日00:00:00至2014年5月14日16:00:00)

    请提出任何建议。

  • 共有2个答案

    查修谨
    2023-03-14
    LocalDateTime.parse( 
        "15-05-2014 00:00:00" , 
        DateTimeFormatter.ofPattern( "dd-MM-uuuu HH:mm:ss" ) 
    )
    .atZone( ZoneId.of( "Asia/Kolkata" ) )
    .toInstant()
    

    Meno Hochschild的答案是正确的,但显示的类现在已经过时。

    DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu HH:mm:ss" ) ;
    LocalDateTime ldt = LocalDateTime.parse( "15-05-2014 00:00:00" , f ) ;
    

    ldt.toString():2014-05-15T00:00

    显然,你确定那根弦代表印度时间的某个时刻。提示:您应该在该字符串中包含区域或偏移量。更好的是,使用标准的ISO 8601格式。

    分配印度时区。

    ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
    ZonedDateTime zdt = ldt.atZone( z ) ;
    

    zdt.toString():2014-05-15T00:00 05:30[亚洲/加尔各答]

    为了看到时间线上的同一时刻,同一点,通过UTC的挂钟时间,提取一个Instant

    Instant instant = zdt.toInstant() ;
    

    instant.toString():2014-05-14T18:30:00Z

    java.time框架内置于Java8及更高版本。这些类取代了麻烦的旧的遗留日期时间类,如java.util.DateCalender

    Joda Time项目现在处于维护模式,建议迁移到java.Time类。

    要了解更多信息,请参阅Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规格是JSR 310。

    使用符合JDBC 4.2或更高版本的JDBC驱动程序,您可以直接与数据库交换java.time对象。不需要字符串或java.sql.*类。

    在哪里获得java.time类?

    • JavaSE8、JavaSE9及更高版本
    • 许多java.time功能被反向移植到Java6
    • java.time类的Android捆绑包实现的更高版本。
    • 对于早期的Android,ThreeTenABP项目采用ThreeTen Backport(如上所述)。了解如何使用ThreeTenABP

    ThreePre-Extra项目扩展java.time附加类。这个项目是未来可能添加到java.time.的试验场。您可以在这里找到一些有用的类,如IntervalYear轮YearQUter等。

    邴英毅
    2023-03-14

    您不能将该日期值“转换为其他时区或UTC”。类型java.util.Date没有任何内部时区状态,仅以用户无法更改的方式按规范引用UTC(仅计算UTC时区中自UNIX历元起的毫秒数,留出秒数)。

    但是您可以将java.util.Date的格式化字符串表示形式转换为另一个时区。我更喜欢使用两个不同的格式化程序,每个时区(和模式)一个。在您的案例中,我也更喜欢使用“亚洲/加尔各答”,因为这样它将普遍有效(IST也可以是“以色列标准时间”,在以色列将有不同的解释):

    DateFormat formatterIST = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
    formatterIST.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); // better than using IST
    Date date = formatterIST.parse("15-05-2014 00:00:00");
    System.out.println(formatterIST.format(date)); // output: 15-05-2014 00:00:00
    
    DateFormat formatterUTC = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
    formatterUTC.setTimeZone(TimeZone.getTimeZone("UTC")); // UTC timezone
    System.out.println(formatterUTC.format(date)); // output: 14-05-2014 18:30:00
    
    // output in system timezone using pattern "EEE MMM dd HH:mm:ss zzz yyyy"
    System.out.println(date.toString()); // output in my timezone: Wed May 14 20:30:00 CEST 2014
    
     类似资料:
    • 问题内容: 这是我的约会日期“ 15-05-2014 00:00:00” 如何将IST转换为UTC即(到14-05-2014 18:30:00) 基于时区到UTC时区。 我的代码是 如果用户从任何区域输入相同的日期,则将获得UTC时间(例如:从澳大利亚,然后从15-05-2014 00:00:00到14-05-2014 16:00:00) 请任何建议。 问题答案: 您不能将日期值“转换为”其他时区

    • 问题内容: 我需要一种简便的方法,可以在不使用任何库的情况下将日期时间戳转换为UTC(从服务器所在的任何时区)。 问题答案: 尝试getTimezone和setTimezone,请参见示例 (但这确实使用了一个类) 更新: 没有任何类,您可以尝试这样的事情: 注意:您可能还需要将时区设置回原始

    • 问题内容: 从服务器上,我得到了这种格式的datetime变量:它是UTC时间。我想使用JavaScript将其转换为当前用户的浏览器时间。 如何使用JavaScript或jQuery完成此操作? 问题答案: 在将字符串转换为javascript中的日期之前,将’UTC’附加到字符串中:

    • 问题内容: 如何将这样的日期(在时区中)转换为时区?确保夏令时能正确处理? 问题答案: 使用和。

    • 我有一个方法可以生成一个随机的日期和时间。 打印输出类似于 我见过几个这样的问题和页面,但他们没有给我一个线索。