java/android中的不同日期
当我在纯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对象,并在两种环境中获得相同的日期 编辑:我已经
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() ;