Ale*_*ien 14 java time gps date
自UTC.1.1707 UTC以来以毫秒表示的时间戳是存储时间戳的常用方法,例如在Java中.
例如:
long timestampUtc = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
这样的时间戳可以以人类读取时间格式形成,例如使用该代码
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
df.setTimeZone(TimeZone.getTimeZone("UTC"));
String humanTimeUtc = df.format(new Date(timestampUtc));
System.out.println(humanTimeUtc);
Run Code Online (Sandbox Code Playgroud)
给出输出: 2014-02-14 14:58:05
现在想象一下,今天午夜时分,管理层引入了新的UTC闰秒.如果我在tommorow上面运行代码,我系统上的java JRE就不会知道闰秒的介绍,并且会错误地格式化时间(一秒钟).
我的推定是否正确?
如何在不能始终使用最新JRE的系统中正确格式化时间(例如,在日志文件中)?
背景信息:
这用于嵌入式设备,该设备通过GPS同步其系统时钟,具有闰秒的GPS数量到UTC.
Java和Unix"epoch"(自1970年1月1日00:00:00 UTC以来的秒数)都完全忽略了闰秒.他们都假设每天(以UTC衡量)恰好有86400秒.一个简单的代码块来验证:
Calendar c = Calendar.getInstance();
c.setTimeZone(TimeZone.getTimeZone("UTC"));
c.set(2014, 0, 1, 0, 0, 0);
c.set(Calendar.MILLISECOND, 0);
System.out.println(c.getTimeInMillis());
Run Code Online (Sandbox Code Playgroud)
您将看到从1970年1月1日到2014年1月1日的秒数是86400的精确倍数(实际上恰好是44年*365.25天/年*86400秒/天); 它不应该是,因为在该间隔中引入了25个闰秒.
如果您需要考虑闰秒,您需要找到一个可以执行此操作的库,或者进行自己的调整.
归档时间: |
|
查看次数: |
746 次 |
最近记录: |