【发布时间】:2021-07-03 16:43:51
【问题描述】:
目前,我有一个解决方案和另一个半解决方案。半解决方案在这里链接,Get seconds since epoch in Linux,但这给出了当前日期时间的纪元以来的时间。我需要让它告诉我指定日期的纪元以来的秒数。我确实有这个功能,但是我找不到它的原始帖子,
std::tm t = {};
std::istringstream ss(dateBuf);
ss >> std::get_time(&t, "%Y-%m-%d");
double seconds = (double)(std::mktime(&t));
不过,我遇到了一些问题。目前,dateBuf = "2020-01-01"; 我要求它不仅能够处理几天,而且能够处理几小时、几分钟、几秒钟……此外,我希望有另一种方法可以做到这一点,而无需每次都分配内存来制作一个新的@987654328 @ 和 std::istringstream,然后将 ss 推入其中。我想知道是否有办法以秒为值直接从char datebuf[] 到double/long double。出于所有密集目的,程序将多次检查此语句以将日期转换为秒,这似乎效率低下。比如
long double SecondsSinceEpoch(const char* date){
//Taking in a date such as "2020-01-01 00:00:00" (Local Time)
//Will return the value 1577836800 (GMT) and Local time of 1577797200
//And also be able to take in a simpler date such as "2020-01-01"
}
【问题讨论】:
-
您使用的是什么版本的 C++?如果您可以使用 C++20,那么新的 date-time facilities 非常棒。如果没有,Howard Hinnant 有一个 most excellent library,这是 C++20 版本所基于的。
-
@NathanOliver 可能两者兼而有之,我拥有的一些应用程序可能有 C++ 20,而有些可能没有。您能否举一个可以从我的帖子中使用的示例?
-
对于基于
scanf的老派答案,我在这里做了一个:stackoverflow.com/a/66795589/7582247 - 我不会担心分配std::tm除非你每秒执行很多次不过。 -
这是个好主意,我会试试的。目前,您使用
sscanf_s的示例效果很好 -
我唯一需要改变 Ted 的就是传入
const char *以保存将数组转换为std::string然后再返回c_str()