大佬教程收集整理的这篇文章主要介绍了c – 打印/读取时的奇怪行为,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <iomanip> #include <iostream> #include <sstream> #include <chrono> #include <ctime> using std::chrono::system_clock; namespace chrono = std::chrono; void test(); int main(int argc,char** argv) { std::stringstream ss; auto start = system_clock::Now(); std::time_t ts = system_clock::to_time_t(start); std::tm time_out = *std::localtime(&ts); ss << std::put_time(&time_out,"%Y-%m-%d %H:%M:%s %Z") << '\n'; std::cout << ss.str() << std::endl; std::tm time_in; ss >> std::get_time(&time_in,"%Y-%m-%d %H:%M:%s %Z"); std::cout << "Are time dsts equal? : " << (time_out.tm_isdst == time_in.tm_isdst) << '\n'; std::time_t rawTime = std::mktime(&time_in); auto end = std::chrono::system_clock::from_time_t(rawTimE); std::cout << "Are time points equal? : " << (start == end) << '\n'; // print the trouble makers std::time_t start_time = system_clock::to_time_t(start); std::time_t end_time = system_clock::to_time_t(end); std::cout << "times: \n" << '\t' << std::put_time(std::localtime(&start_timE),"%c %z") << '\n' << '\t' << std::put_time(std::localtime(&end_timE),"%c %z") << '\n'; // this is a source of strange behavIoUr... // std::cout << "Difference: " // << chrono::duration_cast<chrono::seconds>(start - end).count() // << std::endl; return 0; }
最奇怪的是该程序打印以下内容:
Are time dsts equal? : 1 Are time points equal? : 0 times: Tue Dec 11 19:26:24 2012 +0000 Tue Dec 11 19:26:24 2012 +0000
当我在程序结束时取消注释3行(打印时间点之间的差异)时,结果是:
Are time dsts equal? : 0 Are time points equal? : 0 times: Tue Dec 11 19:29:40 2012 +0000 Tue Dec 11 18:29:40 2012 +0000 Difference: 3600
请注意,dst(夏令时)突然不相等,时间也不同.
我在Mac OS X 10.8.2上使用libc和XCode46-DP2.我使用的铿锵版本是Apple clang 4.1版和clang版本3.2(trunk 167239)
以上是大佬教程为你收集整理的c – 打印/读取时的奇怪行为全部内容,希望文章能够帮你解决c – 打印/读取时的奇怪行为所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。