Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将任何时区中的日期和时间转换为UTC时区_Java_Date_Timezone_Simpledateformat - Fatal编程技术网

Java 将任何时区中的日期和时间转换为UTC时区

Java 将任何时区中的日期和时间转换为UTC时区,java,date,timezone,simpledateformat,Java,Date,Timezone,Simpledateformat,这是我的日期“2014年5月15日00:00:00” 如何将IST转换为UTC,即(至2014年5月14日18:30:00) 基于从时区到UTC时区 我的代码是 DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss"); formatter.setTimeZone(TimeZone.getTimeZone("IST")); //here set timezone System.out.println(forma

这是我的日期“2014年5月15日00:00:00”

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

  • 基于从时区到UTC时区
  • 我的代码是

    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)

    • 请提出任何建议

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

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

    tl;博士 java.time 正确,但显示的类现在已过时

    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 = zdt.toInstant() ;
    
    instant.toString():2014-05-14T18:30:00Z


    关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

    该项目现已启动,建议迁移到类

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

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

    从哪里获得java.time类

    • ,及以后
      • 内置的
      • 标准JavaAPI的一部分,带有捆绑实现
      • Java9添加了一些次要功能和修复
      • 大部分java.time功能都在中向后移植到Java6和Java7
      • 更高版本的Android捆绑包实现了java.time类
      • 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)。看

    该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和。

    当您打印时,无论是IST还是EST,它都将始终位于本地时区。因此,您的作业是否仅与打印相关,或者您希望进一步使用该值由于重播,不同的时区用户从日期和日期输入,我希望转换该日期值并用于进一步计算。我没有打印该值。可能重复FYI,非常麻烦的旧日期时间类,例如,和
    java.text.simpleDataFormat
    现在被内置在Java8和更高版本中的类所取代。看见
    ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
    ZonedDateTime zdt = ldt.atZone( z ) ;
    
    Instant instant = zdt.toInstant() ;