time_t在窗口中来回串起来
time_t to string back and forth in windows
我有2个函数。第一个将time_t转换为字符串。第二个字符串要time_t。 我只有需要转换并恢复为字符串的日期。
功能是
void split(const string &s, char delim, vector<string>& elems) {
stringstream ss(s); string item;
while(getline(ss, item, delim)) { elems.push_back(item);} return;
}
time_t getDateInTimeTfromHyphenSplitString(string s)
{
struct tm tmvar = {0};
vector<string> tim;
split(s.c_str(),'-',tim);
tmvar.tm_year = atoi(tim[2].c_str()) - 1900;
tmvar.tm_mon = atoi(tim[1].c_str());
tmvar.tm_mday = atoi(tim[0].c_str());
tmvar.tm_isdst = 0;
time_t ttm = mktime(&tmvar);
return ttm;
}
string getDateInHyphenSplitStringfromTimeT(time_t t)
{
struct tm *timeinfo = (tm*)malloc(sizeof(tm));
gmtime_s(timeinfo, &t);
char *buffer = NULL;
buffer = (char*)malloc((size_t)20);
strftime(buffer, 20, "%d-%m-%Y", timeinfo);
string s = buffer ;
return s;
}
现在,当我使用以下行测试此代码时,输出似乎很奇怪。
string sk = "31-12-2010";
cout << sk << endl;
time_t ttk = getDateInTimeTfromHyphenSplitString(sk);
sk = getDateInHyphenSplitStringfromTimeT(ttk );
cout << sk << endl;
输入 :- 31-12-2010输出:- 30-01-2011
奇怪的是,对于我作为输入提供的任何日期,我都会得到 1 个月的差额。
请让我知道,如果如何获得正确的时间。
PS:我选择这种技术是因为我需要用"-"格式化日期。
tm_mon
计算"自一月以来的月份",因此值范围从 0 到 11。
您需要从输入月份中减去 1。
除此之外,您的代码会泄漏内存:您永远不会free
malloc
的内存。由于您正在C++编程,因此我建议不要完全使用 malloc/free,但是new, new[], delete and delete[] 相反,因为 malloc 没有对象的概念,也不调用构造函数。
在函数的特殊情况下,您甚至根本不需要动态内存分配:
struct tm timeinfo;
gmtime_s(&timeinfo, &t);
char buffer[20];
strftime(buffer, sizeof(buffer), "%d-%m-%Y", &timeinfo);
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- std::vector的包装器,使数组的结构看起来像结构的数组
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 如何在cpp文件之间切换窗口?在Qt中
- QuadTree只在窗口的右上角绘制
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 处理闪烁窗口事件
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- C++win32 API创建多个类似视口的窗口
- 将大括号括起来的初始值设定项列表作为结构返回
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- SFML RenderWindow打开窗口需要很长时间
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- time_t在窗口中来回串起来
- 如何将按钮添加到任务栏后使窗口看起来对称