C++字符串日期 (1/4/2000) 转换为整数日期 (20000104)
C++ convert string date (1/4/2000) to int date (20000104)
我可以编写一个函数来解析字符串日期,但我觉得我在这里重新发明了轮子。有没有一种更快的,也许是内置C++方式从这种格式的字符串日期:1/4/2000 到更易于使用的 int 如 20000104?
除非你也需要内置的C++方法来做验证,否则"明显"的解析是:
int parseDate(const std::string &input) {
int month;
int day;
int year;
if (std::sscanf(input.c_str(), "%d/%d/%d", &month, &day, &year) != 3) {
// handle error
} else {
// check values to avoid int overflow if you can be bothered
return 10000 * year + 100 * month + day;
}
}
如果要编写几行代码类型安全,则可以使用流提取器而不是sscanf
。
标准库中肯定没有任何东西可以为您完成10000 * year + 100 * month + day
。如果你不执着于这个确切的值,你只需要一个正确顺序的整数,那么你可以看看你的平台是否有一个函数来告诉你所谓的"朱利安日"。
标准库函数是strptime()
的,但不确定这在C++中被认为是多"干净"。
如果您对strptime()
感到满意,以下是您将如何将其用于您的案例:
struct tm when;
strptime("1/4/2000", "%m/%d/%y", &tm); // Note: should check return value.
const int sortable = 10000 * tm.tm_year + 100 * tm.tm_month + tm.tm_day;
当然,如果你愿意,你可以使用Boost;相关的角落似乎是Posix Time。
相关文章:
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 如何将我的每个矢量字符串转换为纪元时间日期
- 将 unix 时间戳转换为人类可读的日期
- 无法在初始化时将"日期"转换为"int"作为错误
- 使用 C++将时间戳转换为格式化的日期时间
- 将日期字符串转换为 unix 时间戳
- 如何在 C/Android NDK 中将字符串日期转换为毫秒
- 将 OLE 自动化日期 (OADate) 双精度转换为结构 tm,而不使用 VariantTime到SystemTime
- 如何将时间和日期转换为 C 或 C++ 的句子格式?
- 在 c++ 中将 ISO 日期时间转换为本地日期时间并提取时间
- time_t提高日期转换,给出不正确的结果
- 将人类可读日期转换为毫秒,然后再转换回来,而不会丢失信息
- 将字符串中的日期转换为FILETIME
- Tizen 中的 UNIX 日期转换
- 在 C++ 中以毫秒为单位将日期转换为时间
- 将日期转换为儒略数
- 将格式为20160120的日期转换为自epoch以来的天数
- 将有符号整数日期转换为Unix秒
- 如何在c++中将Windows日期转换为Unix时间
- 在c++中将dd/mm/yyyy格式的日期转换为时间戳(从01/01/1970开始的秒数)