7

我有一个数字表示自世界时间 1904 年 1 月 1 日凌晨 12:00 以来的纳秒数。我希望实例化一个java.util.Date表示该日期的对象。我应该如何进行?

4

4 回答 4

6

您首先需要将代表nanoseconds的数字转换为milliseconds

然后对于给定的日期字符串,获取自 unix 时间Epoch以来的总毫秒数,然后将之前转换为毫秒的数字添加到其中。

这是工作代码:

String target = "1904/01/01 12:00 AM";  // Your given date string
long nanoseconds = ...;   // nanoseconds since target time that you want to convert to java.util.Date

long millis = TimeUnit.MILLISECONDS.convert(nanoseconds, TimeUnit.NANOSECONDS); 

DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd hh:mm aaa");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = formatter.parse(target);

long newTimeInmillis = date.getTime() + millis;

Date date2 = new Date(newTimeInmillis);

System.out.println(date2);

添加一个import java.util.concurrent.TimeUnit;.

于 2013-07-26T20:01:15.800 回答
2

我认为这是微不足道的:

final GregorianCalendar startDate = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
startDate.clear();
startDate.set(1904, Calendar.JANUARY, 1);
final long startMillis = startDate.getTimeInMillis();
new Date(nanos / 1000 / 1000 + startMillis)
于 2013-07-26T19:57:03.720 回答
0

Date date = new Date(new Date().getTime()-(以纳秒为单位的时间/(1000*1000)));

使用这个有什么问题?我在 1926 年 6 月 8 日用“以纳秒为单位的时间”的值进行了测试,它可以工作。和日期格式无关,代表时间的底层毫秒值是必需的。

于 2013-07-27T00:51:32.373 回答
-3

首先java.util.Date

分配一个 Date 对象并对其进行初始化,以便它表示分配它的时间,精确到毫秒

所以,如果你有变量milliseconds

  1. 以某种方式计算您的日期和 1970 年 1 月 1 日(Unix 纪元)之间的毫秒数diff

  2. 使用Date(long)构造函数

    new Date(milliseconds - diff);
    
于 2013-07-26T19:55:01.117 回答