我有一个数字表示自世界时间 1904 年 1 月 1 日凌晨 12:00 以来的纳秒数。我希望实例化一个java.util.Date
表示该日期的对象。我应该如何进行?
问问题
10251 次
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
以某种方式计算您的日期和 1970 年 1 月 1 日(Unix 纪元)之间的毫秒数
diff
使用
Date(long)
构造函数new Date(milliseconds - diff);
于 2013-07-26T19:55:01.117 回答