如何在C++中设置日期和时间字符串的格式
How to format date and time string in C++
假设我有time_t和tm结构。我不能使用Boost,但不能使用MFC。如何使它成为如下所示的字符串?
Mon Apr 23 17:48:14 2012
使用sprintf是唯一的方法吗?
C 库包含专门用于格式化日期/时间的strftime
。您要求的格式似乎对应于以下内容:
char buffer[256];
strftime(buffer, sizeof(buffer), "%a %b %d %H:%M:%S %Y", &your_tm);
我相信std::put_time
使用类似的格式字符串,尽管它确实减轻了您显式处理缓冲区的麻烦。如果你想将输出写入流,这非常方便,但要把它变成一个字符串,它没有太大的帮助——你必须做这样的事情:
std::stringstream buffer;
buffer << std::put_time(&your_tm, "%a %b %d %H:%M:%S %Y");
// now the result is in `buffer.str()`.
std::put_time
是 C++11 的新功能,但 C++03 在可以执行相同操作的区域设置中具有time_put
方面。如果没记错的话,我确实设法让它工作过一次,但在那之后决定不值得麻烦,从那以后我就再也没有这样做过。
我会尝试std::put_time
. 有关如何使用它的信息,请参阅此处的链接。 它支持完整格式的字符串等。
ctime()
生成该格式的字符串。它需要一个指向time_t
的指针。
还有一些asctime()
将指针指向struct tm
并执行相同的操作。
如果您需要担心不同区域设置的格式,请不要忘记使用当前区域设置初始化 CRT。这也会影响 coleDateTime。
setlocale(LC_COLLATE,“.OCP”); // sets the sort order
setlocale(LC_MONETARY, “.OCP”); // sets the currency formatting rules
setlocale(LC_NUMERIC, “.OCP”); // sets the formatting of numerals
setlocale(LC_TIME, “.OCP”); // defines the date/time formatting
请参阅我的博客文章,其中与MSDN文章和其他来源有关。http://gilesey.wordpress.com/2012/12/30/initailizing-mfccrt-for-consumption-of-regional-settings-internationalizationc
MFC有COleDateTime
它有一个构造器,它接受time_t
(或__time64_t
)并具有Format
方法。
CTime obj1(time_tObj);
CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );
- 如何将时间字符串 (M:SS) 转换为浮点数
- 时间持续时间到时间字符串
- 格式化的时间字符串在解析为time_point时会产生小时差异
- 如何将毫秒的日期时间字符串转换为 UNIX 时间戳
- 将具有 DST 的时间字符串转换为 UTC 时间戳
- 使用提升解析日期时间字符串:采用个位数小时格式
- 使用 c++ 获取两个日期与时间字符串之间的差异(以秒为单位)
- 快速将带有时区的日期时间字符串转换为 UNIX 时间戳(C++)
- 时间字符串减去
- 如何在 Linux 中C++中将日期和时间字符串精确到毫秒?
- 使用 std::get_time: 错误的结果将时间字符串转换为 std::time_t
- 我如何解析包括分数时间的日期时间字符串
- 使用 spirit 将日期时间字符串解析为time_t值
- 如何让此函数返回日期时间字符串
- 如何将标准::时间::time_point转换为带有秒小数部分的日历日期时间字符串?
- 将系统时间 int 转换为格式化的时间字符串
- 从1601年1月1日起,将100纳秒间隔的uint64时间转换为日期时间字符串
- 使用C++将任何形式的日期-时间字符串格式更改为美国日期-时间格式
- localtime_s和strftime用法构建ISO时间字符串
- 在 C++ 中将日期和时间字符串转换为无符号__int64