自1970年1月1日以来,以毫秒表示的时间戳是存储时间戳的常用方法,例如在Java中。
例如:
long timestampUtc = System.currentTimeMillis();
这样的时间戳可以以人类可读的时间格式进行格式化,例如使用此代码
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);
给出输出: 2014-02-14 14:58:05
现在想象一下,今天午夜时分,政府引入了新的UTC leap秒。如果我在tommorow上面运行代码,则系统上的Java
JRE无法知道该leap秒的介绍,并且会错误地格式化时间(一秒)。
我的假设正确吗?
在不能总是使用最新的JRE的系统中,如何正确格式化时间(例如,在日志文件中)?
背景信息:
这在嵌入式设备中使用,该设备通过GPS同步其系统时钟,而GPS的leap秒数偏移到UTC。
Java和Unix的“ epoch”(自1970年1月1日00:00:00
UTC以来的秒数)都完全忽略了leap秒。他们俩都假设每天(以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());
您将看到从1970年1月1日到2014年1月1日的秒数是86400的精确倍数(实际上是44年 365.25天/年
86400秒/天);不应这样,因为在此间隔中引入了25个leap秒。
如果需要考虑leap秒,则需要找到一个可以做到这一点的库,或者自己调整一下。
问题内容: java函数System。 currentTimeMillis ()显然返回自1970年1月1日以来的秒数。但是,根据Wikipedia.org/wiki/Leap_second的说法,自1972年以来已经有25个leap秒。这意味着自1970年1月1日以来的实际秒数比单纯的计算所建议的秒数多25。是否系统。 currentTimeMillis ()会天真的计算而忽略the秒吗? 问题
问题内容: 我正在解析一些具有the秒时间戳记datetime的数据。我使用以下代码来解析该字符串并将其转换为datetime对象: Python文档声称这不应该成为接受的问题。但是,我在上面的时间戳中收到此错误 谢谢 问题答案: 做这个: 输出为:
这个程序的输出与预期的一样,它给出2014-12-01 17:30:15。 但是当我在iFormat中将hh替换为hh(与outputformat相同)时,它给出的输出为12Out格式2014-12-01 05:30:15 如果我将两者都转换为小写,也会发生同样的情况。为什么会出现这种类型的不一致?
我怎样才能使它出现而不必按回车键?!
我不熟悉使用Java的内置时间API。我正在尝试获取UTC的当前时间,我希望能够将其转换为运行程序的任何人的时区。现在我有以下代码: 但是,这打印出来: 它似乎正在获取正确的时区,但没有将其应用于输出。所以如果我打印 他们都打印出“15”正确的方法是什么,让它给出应用时区偏移的时间?UTC时间是15,但我的当地时间是10。我希望能够将UTC转换为时区时间。 原因是我正在设置保存文件,所以我想记录文
我有一个简单的问题: 输出:(我的时区是ICT) 问题是:日历在 DST 日返回此时区的错误时间。时区“美国/圣地亚哥”现在应该是UTC-3(参考:http://www.timeanddate.com/worldclock/chile/santiago)。它需要显示: