700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android java标准时间_关于android:Java中格林尼治标准时间的毫秒数

android java标准时间_关于android:Java中格林尼治标准时间的毫秒数

时间:2019-10-27 14:12:36

相关推荐

android java标准时间_关于android:Java中格林尼治标准时间的毫秒数

我需要隐瞒格林威治标准时间(在Android应用中)的毫秒数,例如:

1372916493000

当我通过此代码将其转换时:

Calendar cal = Calendar.getInstance();

cal.setTimeZone(TimeZone.getTimeZone("GMT"));

cal.setTimeInMillis(millis);

Date date = cal.getTime();

结果为07:41 07/04/。 当我只使用以下结果时:

Date date = new Date(millis);

不幸的是,结果看起来不正确,看起来像我的当地时间。 我尝试通过此服务转换相同的数字,结果是05:41 07/04/,我认为这是正确的。 所以我有两个小时的差异。 有人有任何建议/提示我的转换有什么问题吗?

因此,要清楚一点,您要使用GMT时区将时间戳打印为字符串吗?

尝试查看以下答案:[如何将本地日期转换为GMT] [1] [1]:/questions/10599109/

您是否考虑了夏令时?

看到这里/questions/230126/

您提供的毫秒代表您的本地时区还是GMT时区?

仅供参考,麻烦的旧日期时间类(例如java.util.Date,java.util.Calendar和java.text.SimpleDateFormat)现在已被遗留,由java.time类取代。 在ThreeTen-Backport项目中,许多java.time功能都被反向移植到Java 6和Java 7。 在ThreeTenABP项目中进一步适用于早期的Android。 请参阅如何使用ThreeTenABP…。

如果结果看起来不正确,则表示System.out.println(date),这并不奇怪,因为Date.toString将日期转换为本地时区中的字符串表示形式。要查看格林尼治标准时间的结果,您可以使用此

SimpleDateFormat df = new SimpleDateFormat("hh:ss MM/dd/yyyy");

df.setTimeZone(TimeZone.getTimeZone("GMT"));

String result = df.format(millis);

这段代码对我不起作用..显示IlligalArgumentException

TL;博士

Instant.ofEpochMilli( 1_372_916_493_000L )// Moment on timeline in UTC.

-07-04T05:41:33Z

…和…

Instant.ofEpochMilli( 1_372_916_493_000L )// Moment on timeline in UTC.

.atZone( ZoneId.of("Europe/Berlin" ) ) // Same moment, different wall-clock time, as used by people in this region of Germany.

-07-04T07:41:33+02:00[Europe/Berlin]

细节

您正在使用麻烦的旧日期时间类,而现在却被java.time类所取代。

java.time

如果自1970年1月的UTC 1970年第一时刻的纪元参考日期起算的毫秒数,则将其解析为Instant。 Instant类表示UTC时间轴上的时刻,其分辨率为纳秒(最多十进制的九(9)位数字)。

Instant instant = Instant.ofEpochMilli( 1_372_916_493_000L ) ;

instant.toString(): -07-04T05:41:33Z

要通过特定区域的挂钟时间通过镜头看到相同的瞬间,请应用时区(ZoneId)以获得ZonedDateTime。

ZoneId z = ZoneId.of("Europe/Berlin" ) ;

ZonedDateTime zdt = instant.atZone( z ) ;

zdt.toString(): -07-04T07:41:33+02:00[Europe/Berlin]

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧旧式日期时间类,例如java.util.Date,Calendar和SimpleDateFormat。

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

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。

在哪里获取java.time类?

Java SE 8,Java SE 9和更高版本

内置。

标准Java API的一部分,具有捆绑的实现。

Java 9添加了一些次要功能和修复。

Java SE 6和Java SE 7

java.time的许多功能在ThreeTen-Backport中都被反向移植到Java 6和7。

Android的

更高版本的Android捆绑了java.time类的实现。

对于较早的Android,ThreeTenABP项目改编了ThreeTen-Backport(如上所述)。请参阅如何使用ThreeTenABP…。

在转换过程中,您似乎被自己的时区和UTC时区弄糊涂了。

假设您在伦敦(当前伦敦比格林尼治标准时间早1个小时),而毫秒数就是您所在时区(本例中为伦敦)的时间。

然后,您可能应该:

Calendar cal = Calendar.getInstance();

// Via this, you're setting the timezone for the time you're planning to do the conversion

cal.setTimeZone(TimeZone.getTimeZone("Europe/London"));

cal.setTimeInMillis(1372916493000L);

// The date is in your home timezone (London, in this case)

Date date = cal.getTime();

TimeZone destTz = TimeZone.getTimeZone("GMT");

// Best practice is to set Locale in case of messing up the date display

SimpleDateFormat destFormat = new SimpleDateFormat("HH:mm MM/dd/yyyy", Locale.US);

destFormat.setTimeZone(destTz);

// Then we do the conversion to convert the date you provided in milliseconds to the GMT timezone

String convertResult = destFormat.parse(date);

请让我知道我是否正确理解了您的观点?

干杯

尝试这个

public class Test{

public static void main(String[] args) throws IOException {

Test test=new Test();

Date fromDate = Calendar.getInstance().getTime();

System.out.println("UTC Time -"+fromDate);

System.out.println("GMT Time -"+test.cvtToGmt(fromDate));

}

private Date cvtToGmt( Date date )

{

TimeZone tz = TimeZone.getDefault();

Date ret = new Date( date.getTime() - tz.getRawOffset() );

// if we are now in DST, back off by the delta. Note that we are checking the GMT date, this is the KEY.

if ( tz.inDaylightTime( ret ))

{

Date dstDate = new Date( ret.getTime() - tz.getDSTSavings() );

// check to make sure we have not crossed back into standard time

// this happens when we are on the cusp of DST (7pm the day before the change for PDT)

if ( tz.inDaylightTime( dstDate ))

{

ret = dstDate;

}

}

return ret;

}

}

测试结果:

UTC时间-5月15日星期二16:24:14 IST

GMT时间-5月15日星期二10:54:14

Date date = cal.getTime();

返回通过创建的日期

public final Date getTime() {

return new Date(getTimeInMillis());

}

其中getTimeInMillis()返回毫秒,不带任何TimeZone。

我建议在这里寻找如何做你想要的如何使用Java处理日历时区

但是,是以毫秒为单位的时间是根据GMT还是设备/台式机所在的时区生成的?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。