考虑一台机器,其时间在闰秒期间被中午到中午的线性涂抹所涂抹。
我想知道系统时钟如何在涂抹期间提供准确的纪元时间。
例子:
闰秒定于2016年12月31日。
在机器上,12 月 31 日 11:59:00 的 Unix 时间戳是1483185540
1483191000(正好 1 小时 31 分钟后),这对于 TAI/UTC 来说不再准确,因为 Epoch 不考虑闰秒如何解决这个不准确的问题?一旦系统知道发生了闰秒,本地纪元时间是否会跳过一秒?或者说这个问题是如何处理的?
它是否取决于用于计算时间的时钟的实现?如果是这样,GNU 的 coreutils 如何date处理这个问题?
我试图用 Python 计算出一天开始的纪元(UTC 午夜 12 点)。我找到了这个片段:
today = datetime.date.today()
time.mktime((today.year, today.month, today.day, 0, 0, 0, 0, 0, 0))
Run Code Online (Sandbox Code Playgroud)
但由此产生的纪元指向今天凌晨 5 点的日期。我需要这个的原因是因为我有一个执行 SQL 命令的脚本,需要使用纪元时间进行过滤(出于某种原因,通过本机 SQL 转换或提取纪元会导致我的查询在 5 分钟内完成,而不是 12 秒) 。我猜测我上面放置的代码片段使用了我的本地机器时间。
如何在 kotlin 中以整数形式获取 Unix 时间戳格式的当前时间?
这看起来似乎任何人都不应该要做的,但我正在一个内核模块上的嵌入式系统(的OpenWRT),其中似乎time.h 不包括timespec和time_t类型,以及clock_gettime和gmtime功能,但不包括localtime,ctime,time或者,或者,批判性地,tm类型.
当我尝试将返回指针从gmtime强制转换为我自己的struct时,我得到了一个段错误.
所以我想我会满足于从两种方式解决这个问题 - 想弄清楚如何访问这个缺失的类型,或者如何推出我自己的方法来分解unix时间戳.
我有一个我写的功能(如果有一个很好的标准替代品,请告诉我......)
time_t get_unix_time(string time_str) {
time_t loctime;
time(&loctime);
struct tm *given_time;
time_str = time_str.substr(0, time_str.find_first_of('.'));
replace(time_str.begin(), time_str.end(), ':', ',');
replace(time_str.begin(), time_str.end(), '-', ',');
replace(time_str.begin(), time_str.end(), '/', ',');
replace(time_str.begin(), time_str.end(), ' ', ',');
given_time = localtime(&loctime);
vector<string> trecord = split_string(time_str, ',');
given_time->tm_year = atoi(trecord.at(0).c_str()) - 1900;
given_time->tm_mon = atoi(trecord.at(1).c_str()) - 1;
given_time->tm_mday = atoi(trecord.at(2).c_str());
given_time->tm_hour = atoi(trecord.at(3).c_str());
given_time->tm_min = atoi(trecord.at(4).c_str());
given_time->tm_sec = atoi(trecord.at(5).c_str());
return mktime(given_time);
}
Run Code Online (Sandbox Code Playgroud)
该函数的输入(time_str)格式为1970-01-01 00:00:00.0.split_string()函数将字符串time_str拆分为包含以下内容的向量:
{1970,01,01,00,00,00}
用于填充given_time结构.
我编写了一个函数来测试它,并将其完全传递给了输入(epoch的开始).但是,它给我回来的时间是21600,即1970-01-01 06:00:00,或UTC + 6 …
我认为这是一个愚蠢的问题,但似乎我找不到答案.
我有这个时间戳:1295598602.
在我的PHP脚本中,我有:
$ date = date('Ym-d',1295598602); $ hour = date('H',1295598602).':00';
返回:
日期:2011-01-21
时间:03:00
现在我去了一个在线转换网站来测试这个.我用过这个.但似乎对于这个时间戳值而言
星期五,2011年1月21日08:30:02 GMT
现在,哪一个是正确的?
为什么这不起作用?怎么解决?我试图绘制一个图形,其中x轴是时间轴,y值是csv文件中的第二列.我希望x plot标签采用更易读的格式......
1315655275.0,0.1,1.4
1325655275.0,0.11,2.2
1335655275.0,0.23,11.96
1345655275.0,0.81,63.18
1355655275.0,2.76,560.28
1365655275.0,5.54,609.4
1375655275.0,7.21,576.8
Run Code Online (Sandbox Code Playgroud)
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.dates as md
data = np.genfromtxt('testi.csv', delimiter=',', names=['t', 'btc', 'eur'])
plt.xkcd()
plt.plot(data['t'], data['btc'], label='the data')
plt.xticks(rotation=75)
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.savefig('testi2.png')
Run Code Online (Sandbox Code Playgroud)
这是我给"python <testi2.py"后的错误信息:
Traceback (most recent call last):
File "<stdin>", line 13, in <module>
File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.4.x-py2.7-linux-i686.egg/matplotlib/pyplot.py", line 564, in savefig
return fig.savefig(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.4.x-py2.7-linux-i686.egg/matplotlib/figure.py", line 1421, in savefig
self.canvas.print_figure(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib-1.4.x-py2.7-linux-i686.egg/matplotlib/backend_bases.py", line 2220, …Run Code Online (Sandbox Code Playgroud) 在MySQL中尝试处理unix时间戳时,我发现了一些奇怪的东西.我注意到在转换为任意日期的unix时间戳时,介于'00:59:59'和'01:00:00'之间的时间超过1秒.深入挖掘我有以下示例查询,结果我不明白:
SELECT FROM_UNIXTIME(1382835600) AS a, FROM_UNIXTIME(1382832000) AS b;
+---------------------+---------------------+
| a | b |
+---------------------+---------------------+
| 2013-10-27 01:00:00 | 2013-10-27 01:00:00 |
+---------------------+---------------------+
Run Code Online (Sandbox Code Playgroud)
两个unix时间戳相距1小时(3600秒),但生成的时间戳相同.也许这是一个时区问题,但它毕竟是在同一台服务器上.
我需要创建一个PHP脚本,从数据库(日志,消息,登录等)中提取各种内容的时间戳,如果它们超过X天数,则删除它们.我很擅长与时间一起工作,并且有点难以做到最好.
我意识到我可以使用explode()将字符串中的日/月/年分开,并将它们与一堆If语句进行比较,但是想使用更有效的方法.这样的事情是正确的做法吗?
$dt = "2011-03-19 10:05:44";
//if $dt is older than 90 days
if((time()-(60*24*90)) > strtotime($dt))
{
}
Run Code Online (Sandbox Code Playgroud)
从时间()减去(分钟*小时*天)或数字是否错误?
在闰秒之前和期间,似乎呼叫new Date()将返回23:59:59两次(一次在闰秒之前,一次在闰秒期间),而不是23:59:59和23:59:60.
有没有办法(没有在应用程序中实现NTP客户端,或检查时钟倒退或重复自己)以确定给定秒是否是闰秒,以便正确呈现23:59 :60给用户?
就此而言,主机操作系统是否有任何钩子来确定它是在前或后闰秒?