我有一个数字代表自1904年1月1日凌晨12点以来的通用时间纳秒数。我希望实例化表示该日期的java.util.Date
对象。我该怎么办?
答案 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
以某种方式计算您的日期与1970年1月1日(Unix纪元)之间的毫秒数diff
使用Date(long)
构造函数
new Date(milliseconds - diff);