闰秒存储在 Mac OS X 的任何地方吗?
Are leap seconds stored on Mac OS X anywhere?
我 运行 find /usr/share/zoneinfo/ -type f -exec file {} \; |grep -v 'no leap'
在我的系统上,每个时区文件都说它没有闰秒。闰秒是否存储在 mac OS X 上的任何地方,我可以以可靠的方式获取?我正在编写一个需要闰秒的库,所以我宁愿不通过网络连接,尽管进行某种系统调用是可以接受的。
macOS 上的 IANA 数据库中没有存储闰秒信息:/usr/share/zoneinfo
如果您愿意使用第 3 方 C++11 库,Howard Hinnant's time zone library 可为您提供处理闰秒的完整功能。这确实需要下载 IANA 数据库。但是您可以将此库配置为自动下载,或者您可以手动下载,库将访问它。
文档中有这个例子:
#include "tz.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono_literals;
auto start = to_utc_time(sys_days{2015_y/jul/1} - 500ms);
auto end = start + 2s;
for (auto utc = start; utc < end; utc += 100ms)
{
auto sys = to_sys_time(utc);
auto tai = to_tai_time(utc);
auto gps = to_gps_time(utc);
std::cout << format("%F %T SYS == ", sys)
<< format("%F %T %Z == ", utc)
<< format("%F %T %Z == ", tai)
<< format("%F %T %Z\n", gps);
}
}
此示例迭代 2015 年 6 月闰秒插入附近的时间,比较系统时间、UTC、TAI 和 GPS 时钟标准:
2015-06-30 23:59:59.500 SYS == 2015-06-30 23:59:59.500 UTC == 2015-07-01 00:00:34.500 TAI == 2015-07-01 00:00:15.500 GPS
2015-06-30 23:59:59.600 SYS == 2015-06-30 23:59:59.600 UTC == 2015-07-01 00:00:34.600 TAI == 2015-07-01 00:00:15.600 GPS
2015-06-30 23:59:59.700 SYS == 2015-06-30 23:59:59.700 UTC == 2015-07-01 00:00:34.700 TAI == 2015-07-01 00:00:15.700 GPS
2015-06-30 23:59:59.800 SYS == 2015-06-30 23:59:59.800 UTC == 2015-07-01 00:00:34.800 TAI == 2015-07-01 00:00:15.800 GPS
2015-06-30 23:59:59.900 SYS == 2015-06-30 23:59:59.900 UTC == 2015-07-01 00:00:34.900 TAI == 2015-07-01 00:00:15.900 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.000 UTC == 2015-07-01 00:00:35.000 TAI == 2015-07-01 00:00:16.000 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.100 UTC == 2015-07-01 00:00:35.100 TAI == 2015-07-01 00:00:16.100 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.200 UTC == 2015-07-01 00:00:35.200 TAI == 2015-07-01 00:00:16.200 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.300 UTC == 2015-07-01 00:00:35.300 TAI == 2015-07-01 00:00:16.300 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.400 UTC == 2015-07-01 00:00:35.400 TAI == 2015-07-01 00:00:16.400 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.500 UTC == 2015-07-01 00:00:35.500 TAI == 2015-07-01 00:00:16.500 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.600 UTC == 2015-07-01 00:00:35.600 TAI == 2015-07-01 00:00:16.600 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.700 UTC == 2015-07-01 00:00:35.700 TAI == 2015-07-01 00:00:16.700 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.800 UTC == 2015-07-01 00:00:35.800 TAI == 2015-07-01 00:00:16.800 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.900 UTC == 2015-07-01 00:00:35.900 TAI == 2015-07-01 00:00:16.900 GPS
2015-07-01 00:00:00.000 SYS == 2015-07-01 00:00:00.000 UTC == 2015-07-01 00:00:36.000 TAI == 2015-07-01 00:00:17.000 GPS
2015-07-01 00:00:00.100 SYS == 2015-07-01 00:00:00.100 UTC == 2015-07-01 00:00:36.100 TAI == 2015-07-01 00:00:17.100 GPS
2015-07-01 00:00:00.200 SYS == 2015-07-01 00:00:00.200 UTC == 2015-07-01 00:00:36.200 TAI == 2015-07-01 00:00:17.200 GPS
2015-07-01 00:00:00.300 SYS == 2015-07-01 00:00:00.300 UTC == 2015-07-01 00:00:36.300 TAI == 2015-07-01 00:00:17.300 GPS
2015-07-01 00:00:00.400 SYS == 2015-07-01 00:00:00.400 UTC == 2015-07-01 00:00:36.400 TAI == 2015-07-01 00:00:17.400 GPS
我 运行 find /usr/share/zoneinfo/ -type f -exec file {} \; |grep -v 'no leap'
在我的系统上,每个时区文件都说它没有闰秒。闰秒是否存储在 mac OS X 上的任何地方,我可以以可靠的方式获取?我正在编写一个需要闰秒的库,所以我宁愿不通过网络连接,尽管进行某种系统调用是可以接受的。
macOS 上的 IANA 数据库中没有存储闰秒信息:/usr/share/zoneinfo
如果您愿意使用第 3 方 C++11 库,Howard Hinnant's time zone library 可为您提供处理闰秒的完整功能。这确实需要下载 IANA 数据库。但是您可以将此库配置为自动下载,或者您可以手动下载,库将访问它。
文档中有这个例子:
#include "tz.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono_literals;
auto start = to_utc_time(sys_days{2015_y/jul/1} - 500ms);
auto end = start + 2s;
for (auto utc = start; utc < end; utc += 100ms)
{
auto sys = to_sys_time(utc);
auto tai = to_tai_time(utc);
auto gps = to_gps_time(utc);
std::cout << format("%F %T SYS == ", sys)
<< format("%F %T %Z == ", utc)
<< format("%F %T %Z == ", tai)
<< format("%F %T %Z\n", gps);
}
}
此示例迭代 2015 年 6 月闰秒插入附近的时间,比较系统时间、UTC、TAI 和 GPS 时钟标准:
2015-06-30 23:59:59.500 SYS == 2015-06-30 23:59:59.500 UTC == 2015-07-01 00:00:34.500 TAI == 2015-07-01 00:00:15.500 GPS
2015-06-30 23:59:59.600 SYS == 2015-06-30 23:59:59.600 UTC == 2015-07-01 00:00:34.600 TAI == 2015-07-01 00:00:15.600 GPS
2015-06-30 23:59:59.700 SYS == 2015-06-30 23:59:59.700 UTC == 2015-07-01 00:00:34.700 TAI == 2015-07-01 00:00:15.700 GPS
2015-06-30 23:59:59.800 SYS == 2015-06-30 23:59:59.800 UTC == 2015-07-01 00:00:34.800 TAI == 2015-07-01 00:00:15.800 GPS
2015-06-30 23:59:59.900 SYS == 2015-06-30 23:59:59.900 UTC == 2015-07-01 00:00:34.900 TAI == 2015-07-01 00:00:15.900 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.000 UTC == 2015-07-01 00:00:35.000 TAI == 2015-07-01 00:00:16.000 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.100 UTC == 2015-07-01 00:00:35.100 TAI == 2015-07-01 00:00:16.100 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.200 UTC == 2015-07-01 00:00:35.200 TAI == 2015-07-01 00:00:16.200 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.300 UTC == 2015-07-01 00:00:35.300 TAI == 2015-07-01 00:00:16.300 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.400 UTC == 2015-07-01 00:00:35.400 TAI == 2015-07-01 00:00:16.400 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.500 UTC == 2015-07-01 00:00:35.500 TAI == 2015-07-01 00:00:16.500 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.600 UTC == 2015-07-01 00:00:35.600 TAI == 2015-07-01 00:00:16.600 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.700 UTC == 2015-07-01 00:00:35.700 TAI == 2015-07-01 00:00:16.700 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.800 UTC == 2015-07-01 00:00:35.800 TAI == 2015-07-01 00:00:16.800 GPS
2015-06-30 23:59:59.999 SYS == 2015-06-30 23:59:60.900 UTC == 2015-07-01 00:00:35.900 TAI == 2015-07-01 00:00:16.900 GPS
2015-07-01 00:00:00.000 SYS == 2015-07-01 00:00:00.000 UTC == 2015-07-01 00:00:36.000 TAI == 2015-07-01 00:00:17.000 GPS
2015-07-01 00:00:00.100 SYS == 2015-07-01 00:00:00.100 UTC == 2015-07-01 00:00:36.100 TAI == 2015-07-01 00:00:17.100 GPS
2015-07-01 00:00:00.200 SYS == 2015-07-01 00:00:00.200 UTC == 2015-07-01 00:00:36.200 TAI == 2015-07-01 00:00:17.200 GPS
2015-07-01 00:00:00.300 SYS == 2015-07-01 00:00:00.300 UTC == 2015-07-01 00:00:36.300 TAI == 2015-07-01 00:00:17.300 GPS
2015-07-01 00:00:00.400 SYS == 2015-07-01 00:00:00.400 UTC == 2015-07-01 00:00:36.400 TAI == 2015-07-01 00:00:17.400 GPS