将自1904年以来的纳秒转换为有效的java日期

时间:2013-07-26 19:51:21

标签: java date

我有一个数字代表自1904年1月1日凌晨12点以来的通用时间纳秒数。我希望实例化表示该日期的java.util.Date对象。我该怎么办?

4 个答案:

答案 0 :(得分:5)

您首先需要将数字表示纳秒转换为毫秒

然后,对于给定的日期字符串,获取自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;

答案 1 :(得分: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)

答案 2 :(得分:0)

日期日期=新日期(新日期()。getTime() - (以纳秒为单位的时间/(1000 * 1000));

使用它有什么问题?我在1926年6月8日测试了“以纳秒为单位的时间”值并且它有效。和日期格式无关,表示时间的基础毫秒值就是所需要的。

答案 3 :(得分:-3)

首先java.util.Date

  

分配一个Date对象并对其进行初始化,使其代表分配的时间,测量为最接近的毫秒

所以,如果你有变量milliseconds

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

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

    new Date(milliseconds - diff);