我试图使用GCC(测试版本4.5.1,4.6.3,4.8.4)编译此示例程序:
#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>
using std::chrono::system_clock;
int main()
{
system_clock::time_point now = system_clock::now();
std::time_t now_c = system_clock::to_time_t(
now - std::chrono::hours(24));
std::cout << "One day ago, the time was "
<< std::put_time(std::localtime(&now_c), "%F %T") << '\n';
}
Run Code Online (Sandbox Code Playgroud)
prog.cpp: In function 'int main()':
prog.cpp:14:18: error: 'put_time' is not a member of 'std'
Run Code Online (Sandbox Code Playgroud)
我想,可能还没有实现.所以我试着检查这个功能的实现状态.我只找到了这个页面:
但我找不到任何笔记put_time或chrono或相似.任何人都可以指向我提供有关此库的实现状态的信息的资源吗?
我正在尝试解析格式为 的日期YYMMDD。作为测试,我尝试了以下代码:
#include <iostream>
#include <sstream>
#include <locale>
#include <iomanip>
int main(){
std::tm t = {};
std::istringstream ss("191203");
ss >> std::get_time(&t, "%y%m%d");
if (ss.fail()){
std::cout << "Parse failed\n";
} else {
std::cout << std::put_time(&t, "%c") << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)
使用 Coliru、GCC 6.1 (C++17) 进行测试,输出为:
Sun Mar 0 00:00:00 1912
Run Code Online (Sandbox Code Playgroud)
我所期望的是:
Mon Dec 3 00:00:00 2019
Run Code Online (Sandbox Code Playgroud)
格式字符串有问题吗?
假设我们有一个表示日期的整数,格式为 20160120。我想将其转换为自纪元 (1970-01-01) 以来的天数,以便它对应于 POSIX 样式的日期。例如,int 20160718 将变为 int 17000。
\n\n我的尝试如下,我首先将 int 转换为字符串,然后转换为纪元以来的秒数,然后转换为纪元以来的天数。这样做的一个问题是我必须将日期移动 3 小时才能获得正确的日期(请参阅std::to_string(d*100 + 3))行。我怀疑这与时区有关?我在 UTC - 1。我不知道如何处理这个问题。
所以我想知道是否有一种不太复杂的方法来做到这一点,如果没有\xe2\x80\x93 我如何解决时区问题。
\n\n#include <iostream>\n#include <chrono>\n#include <time.h>\n#include <iomanip>\n#include <sstream>\n#include <string>\n\ntypedef std::chrono::duration<int, std::ratio<60 * 60 * 24>> days_type;\ntypedef std::chrono::system_clock sysclock;\n\nint convert(const unsigned d){\n std::tm t = {};\n std::istringstream ss(std::to_string(d*100 + 3)); \n ss >> std::get_time(&t, "%Y%m%d%H");\n\n time_t t_ = mktime(&t);\n\n /*\n Now convert seconds since epoch to days since epoch via chrono...\n */\n\n sysclock::time_point tp = sysclock::from_time_t(t_);\n\n …Run Code Online (Sandbox Code Playgroud)