Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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/android中的不同日期_Java_Android_Date_Timezone - Fatal编程技术网

java/android中的不同日期

java/android中的不同日期,java,android,date,timezone,Java,Android,Date,Timezone,当我在纯java和android中执行此代码时,会得到不同的结果: System.out.println(新日期(1311940549187l).toString()) 在纯java中,我得到以下输出:Fri Jul 29 13:55:49 CEST 2011 在android中,我得到以下输出:Fri Jul 29 11:55:49 GMT+00:00 2011 我知道这和时区有关。但我真的需要得到同样的输出。如何基于Long值生成Date对象,并在两种环境中获得相同的日期 编辑:我已经

当我在纯java和android中执行此代码时,会得到不同的结果:

System.out.println(新日期(1311940549187l).toString())

  • 在纯java中,我得到以下输出:
    Fri Jul 29 13:55:49 CEST 2011

  • 在android中,我得到以下输出:
    Fri Jul 29 11:55:49 GMT+00:00 2011

我知道这和时区有关。但我真的需要得到同样的输出。如何基于
Long
值生成
Date
对象,并在两种环境中获得相同的日期


编辑:我已经使用SimpleDataFormat,两个日期时间有2小时的偏移量。请告诉我如何去掉偏移量


这就是我如何使用SimpleDataFormat:
新SimpleDataFormat(“MM-dd-yyyy-HH:MM”)

两个环境中的日期是相同的,但toString()给出的结果不同,因为这两个环境配置了不同的时区

要格式化特定时区的日期,请使用SimpleDataFormat并将时区设置为特定值(例如GMT)

更新:

TimeZone gmt = TimeZone.getTimeZone("GMT");
SimpleDateFormat format = new SimpleDateFormat("...");
format.setCalendar(Calendar.getInstance(gmt));

您可以使用
SimpleDataFormat
并转换java代码,以匹配android提供的输出

反之亦然(Android转换为匹配java)

tl;博士
即时
ofEpochMilli先生(1_311_940_549_187L)
.toString()
2011-07-29T11:55:49.187Z

java.time 现代解决方案使用java.time类。可怕的
java.util.Date
类被
java.time.Instant
取代。两者都代表UTC中的一个时刻。
Instant
类的表现要好得多,因为它不会像
Date
那样以意外的方式注入时区。切勿使用
java.util.Date

将UTC中1970年第一时刻的历元引用后的毫秒数解析为
java.time.Instant
对象

Instant instant = Instant.ofEpochMilli( 1_311_940_549_187L ) ;
生成标准格式的文本

2011-07-29T11:55:49.187Z


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

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

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

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类。Hibernate5和JPA2.2支持java.time

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • 带来了一些小功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • Android(26+)的更高版本捆绑了java.time类的实现

    • 对于早期的Android(可能正是莫里斯在回答中所说的)。
      Instant instant = Instant.ofEpochMilli( 1_311_940_549_187L ) ;
      
      String output = instant.toString() ;