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

获取UTC日期的纪元后的毫秒数会返回错误的结果吗?[重复]

司空镜
2023-03-14

我理解那个日期。Java中的getTime()将返回自EPOCH以来的毫秒,将日期视为UTC日期。

在Java 6上,我有一个日期,如果我在这一天执行Date.getTime(),它会返回自EPOCH以来的毫秒数,因为该日期位于PDT时区。(我运行代码的服务器是按PDT时间配置的。)

我希望该程序认为它是一个UTC日期,并返回自纪元以来的毫秒。

以下是我的代码片段和输出:

 logger.debug("Date: " + someDate);
 logger.debug("someDate in millis): " + someDate.getTime());

 Output:                                                                                                         
 Date: 2016-08-19 12:04:56.993
 someDate in millis: 1471633496993 //This is time since EPOCH for 2016-08-19 12:04:56.993 PDT

而我希望它以1471608296993的形式返回Millis(1471608296993是自UTC日期: 2016-08-19 12:04:56.993的EPOCH以来的milis)

简言之,我想得到EPOCH以来的毫秒,而不考虑当地时区,在我的情况下是PDT。

请帮帮忙。

共有3个答案

慎俊艾
2023-03-14

使用这个问题的答案中的信息,我能够想出正确地将您的< code>String解析为UTC日期时间的代码。诀窍是在创建< code>Date对象之前,使用< code>SimpleDateFormat对象来解析< code>String:

String strDate = "2016-08-19 12:04:56.993";
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
isoFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = isoFormat.parse(strDate);
System.out.println(date);
System.out.println(date.getTime());

输出:

Fri Aug 19 08:04:56 EDT 2016
1471608296993
居星阑
2023-03-14

除了约翰霍普金斯已经说过的话。

Date对象以毫秒为单位存储自1970年1月1日格林尼治标准时间00:00:00以来的时间。但是当您打印出来时,它将作为您当前时区的日期打印出来。

下面的片段演示了这一点。

Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.set(Calendar.YEAR, 2016);
cal.set(Calendar.MONTH, Calendar.AUGUST);
cal.set(Calendar.DAY_OF_MONTH, 19);
cal.set(Calendar.HOUR_OF_DAY, 12);
cal.set(Calendar.MINUTE, 4);
cal.set(Calendar.SECOND, 56);
cal.set(Calendar.MILLISECOND, 993);

long epochMillis = cal.getTime().getTime();
System.out.println("EPOCH millis    = " + epochMillis);
System.out.println("date from cal   = " + cal.getTime());
Date date = new Date(epochMillis);
System.out.println("date from epoch = " + date);

输出

EPOCH millis    = 1471608296993
date from cal   = Fri Aug 19 14:04:56 CEST 2016
date from epoch = Fri Aug 19 14:04:56 CEST 2016

两行<代码>的日期从...使用您的默认时区打印日期< code > 2016-08-19 12:04:56.993 UTC 。

张星洲
2023-03-14

根据 Java Doc getTime(

返回自1970年1月1日格林尼治标准时间00:00:00以来的毫秒数

它不使用当地时区

 类似资料:
  • 我是一个PL/SQL新手,需要将unix时代以来的千秒转换为日期/时间。我可以转换为GMT日期/时间,但不知道如何调整时区。我很接近,但不太接近。 我的输入是r\u msg。OriginationTime,其值类似于138255210277 这个 给出了类似的东西 这正是我想要的,除了格林威治标准时间。 这 给予 所以我只需要做一些 但我知道 我试过几种变体,但都不管用。 感谢您的帮助。 谢谢,但

  • 我想创建一个日历对象,并将其设置为某一年和该年中的一周。 当我将calendar对象传递给setWeekChecked方法时,这是它的toString: java.util.gregoriancalendar[time=?,arefieldsset=false,lenient=true,zone=America/New_York,firstDayofWeek=1,minimalDaysinfirs

  • 问题内容: 我对当前UTC时间以毫秒为单位不感兴趣,也无需弄乱时区。我的原始日期已经存储为UTC时间戳。 我在UTC时间“ 2012-06-14 05:01:25”中存储了一个日期。我对日期时间不感兴趣,但对日期部分感兴趣。因此,在用Java检索日期并排除小时,分钟和秒之后,我剩下的是“ 2012-06-14”。 如何将其转换为UTC毫秒? 问题答案: 编辑:我错过了“忽略一天中的时间”部分。它现

  • 问题内容: 我有一个DatePicker d;我需要获取日期的毫秒值。(自1970年以来的毫秒值) 我该怎么做? 问题答案: 创建一个日历对象,并从日期选择器和today.getTimeInMillis()中设置日期和时间。

  • 我想将日期字符串从“2016-09-23T09:14:52.555000000”格式解析为“23-SEP-2016”格式。 这是我的密码: 问题是如果我用这句台词 SimpleDateFormat oracleDateFormat=新的SimpleDateFormat(“yyyy-MM-dd'T'kk:MM:ss.S”); 输出为(不正确的日期值): 而如果用这条线 oracleDateForma