字符串来提升 posix_time 然后再回来

Posted

技术标签:

【中文标题】字符串来提升 posix_time 然后再回来【英文标题】:string to boost posix_time then back again 【发布时间】:2013-04-07 05:27:34 【问题描述】:

这里不是问题,只是好奇而已。我想知道当与其他语言的 dateTime 实现类似的操作只有 3 或 4 行时,我必须编写多少代码才能实现这一点。

所以我得到的是一个字符串形式的时间戳,即:06-Feb-2013 00:01:01

通过使用 boost 库,我将创建输入和输出方面,创建一个字符串流并将 io 方面注入流中。然后,我会将时间戳字符串读入字符串流,然后将其移出到 posix 时间对象,以在将其移回流中之前添加 1 秒,这样我就可以将其用作字符串。从某种意义上说,我在这里所做的只是将06-Feb-2013 00:01:01 之类的时间戳转换为06-Feb-2013 00:01:02

一个例子是:

using namespace boost::posix_time;

ptime timeStamp;
time_facet* outFacet = new time_facet("%d-%b-%Y %H:%M:%S");
time_input_facet* inFacet = new time_input_facet("%d-%b-%Y %H:%M:%S");
std::stringstream ss;
ss.imbue(std::locale(std::locale::classic(), outFacet));
ss.imbue(std::locale(ss.getloc(), inFacet));

ss.str(06-Feb-2013 00:01:01);
ss >> timeStamp;
timeStamp+=seconds(1);
ss.str("");
ss << timeStamp;

代码有效,我没有问题。我只是想知道我是否在考虑到 python/ruby/js 等时以迂回的方式做到了这一点,我所要做的就是:

dt = new DateTime("06-Feb-2013 00:01:01", aformat);
dt.addSecond() //or dt += another DateTime object
dt.strformat(aformat) //or trace/print/puts dt

现在我很欣赏 C++ 的级别较低,但我还是忍不住想知道。那么有什么改进或想法吗?

【问题讨论】:

似乎是一种仪式,如果您要遵循任何其他语言的实现,它可能会同样冗长。当您选择使用脚本语言而不是靠近金属演奏时,不必自己动手就是入场的代价 【参考方案1】:

如果您愿意接受稍有不同(固定)的时间格式,请使用 std::string to_simple_string(ptime) (格式化 YYYY-mmm-DD HH:MM:SS.fffffffff string where mmm 3 char 月份名称。仅在非零时包含小数秒,根据http://www.boost.org/doc/libs/1_34_0/doc/html/date_time/posix_time.html) 可以简化您的代码以执行输出格式以及相应的“ptime time_from_string(std::string)”。

【讨论】:

以上是关于字符串来提升 posix_time 然后再回来的主要内容,如果未能解决你的问题,请参考以下文章

提升::posix_time。如何在同一应用程序中同时表示微秒和纳秒日期时间

如何将日期正确转换为 UTC,然后再转换回来?

sql 取出一个字符串中最后一个特殊字符的右边的字符

DELPHI清除TXT文件内重复字符串

Oracle数据库空字符串和空字符串比较的问题

Python 字符串内置方法