标签: boost-date-time

如何从字符串中解析日期/时间?

输入:包含日期和可选时间的字符串.不同的表现形式会很好但很必要.字符串是用户提供的,可能会格式错误.例子:

  • "2004-03-21 12:45:33" (我认为这是默认布局)
  • "2004/03/21 12:45:33" (可选布局)
  • "23.09.2004 04:12:21" (德语格式,可选)
  • "2003-02-11" (时间可能会丢失)

所需的输出:纪元以来(1970/01/01 00:00:00)或其他一些定点的秒数.

额外:此外,读取本地系统时间的UTC偏移量会很棒.

假设输入是相关机器上的本地时间.输出需要是UTC.系统只是Linux(需要Debian Lenny和Ubuntu).

我试图使用boost/date_time,但必须承认我无法绕过文档.以下工作无需从系统本地时间转换为UTC:

std::string date = "2000-01-01";
boost::posix_time::ptime ptimedate = boost::posix_time::time_from_string(date);
ptimedate += boost::posix_time::hours(Hardcoded_UTC_Offset);// where to get from?
struct tm = boost::posix_time::to_tm(ptimedate);
int64_t ticks = mktime(&mTmTime);
Run Code Online (Sandbox Code Playgroud)

我认为boost::date_time可以提供所需的UTC偏移,但我不知道如何.

c++ datetime boost utc boost-date-time

53
推荐指数
3
解决办法
6万
查看次数

如何将boost :: posix_time :: ptime转换为time_t?

是否有一些"标准"方式或我能做的最好的是直接通过减去来计算它gregorian::date(1970,1,1)

c++ boost boost-date-time

42
推荐指数
4
解决办法
3万
查看次数

dynamic_cast的表现?

在阅读问题之前:
这个问题不是关于它的使用有多大dynamic_cast.它只是它的表现.

我最近开发了一个dynamic_cast经常使用的设计.
在与同事讨论时,几乎每个人都说dynamic_cast不应该使用它,因为它的表现不好(这些是有不同背景的同事,在某些情况下彼此不认识.我在一家大公司工作)

我决定测试这种方法的性能而不是仅仅相信它们.

使用以下代码:

ptime firstValue( microsec_clock::local_time() );

ChildObject* castedObject = dynamic_cast<ChildObject*>(parentObject);

ptime secondValue( microsec_clock::local_time() );
time_duration diff = secondValue - firstValue;
std::cout << "Cast1 lasts:\t" << diff.fractional_seconds() << " microsec" << std::endl;
Run Code Online (Sandbox Code Playgroud)

上面的代码使用boost::date_timeLinux上的方法来获取可用的值.
我已经完成dynamic_cast了三合一执行,测量它们的代码是相同的.

执行结果如下:
Cast1持续时间:74
microsec Cast2持续时间:2
microsec Cast3持续时间:1微秒

第一次施法总是花费74-111微秒,同样执行的以下演员需要1-3微秒.

最后我的问题
是:dynamic_cast真的表现不好吗?
根据测试结果,它没有.我的测试代码是否正确?
为什么这么多开发人员认为如果不是这么慢呢?

c++ performance dynamic-cast boost-date-time

39
推荐指数
5
解决办法
3万
查看次数

如何获得当前时区?

在我看到的大多数例子中:

time_zone_ptr zone( new posix_time_zone("MST-07") ); 
Run Code Online (Sandbox Code Playgroud)

但我只想获得运行代码的机器的当前时区.我不想硬编码时区名称.

c++ timezone boost boost-date-time

28
推荐指数
2
解决办法
1万
查看次数

将当前时间作为YYYY-MM-DD-HH-MM-SS字符串

我试图以优雅的方式将当前时间作为"YYYY-MM-DD-HH-MM-SS"格式化字符串.我可以从Boost的"Date Time"库获取ISO格式的当前时间,但它有其他分隔字符串,这对我不起作用(我在文件名中使用它).当然我可以直接替换分隔字符串,但感觉有一种更好的方法可以使用日期时间的格式化选项.有这样的方式,如果有的话,我该如何使用它?

c++ boost string-formatting boost-date-time

19
推荐指数
1
解决办法
3万
查看次数

拥有/删除区域设置中的构面(std :: locale)

我编写了以下函数来使用boost.date_time获取日期/时间字符串.

namespace bpt = boost::posix_time;

string
get_date_time_string(bpt::ptime time)
{
  bpt::time_facet * facet(new bpt::time_facet);
  facet->format("%Y%m%d%H%M%S");

  stringstream return_value;
  return_value.imbue(std::locale(std::locale::classic(), facet));
  return_value << time;

  return return_value.str();
}
Run Code Online (Sandbox Code Playgroud)

我对所有权/一个简单的问题delete了的"ING facet对象.std :: locale的构造函数没有明确的所有权/ delete' facet.尝试使用shared_ptr-wrapped和堆栈分配版本facet- 两者都导致了seg-fault.此外,通过valgrind运行上述函数并没有显示任何泄漏(这可能意味着语言环境或流正在delete处理),但我只是想清楚我在这里做正确的事情.谢谢.

c++ boost locale facet boost-date-time

16
推荐指数
1
解决办法
2083
查看次数

使用boost :: date_time在当前时区获取当前时间的最简单方法?

如果我date +%H-%M-%S在命令行(Debian/Lenny)上做的话,我会得到一个用户友好的(不是UTC,而不是DST-less,正常人在他们的手表上的时间)打印时间.

获得同样东西的最简单方法是boost::date_time什么?

如果我这样做:

std::ostringstream msg;

boost::local_time::local_date_time t = 
  boost::local_time::local_sec_clock::local_time(
    boost::local_time::time_zone_ptr()
  );

boost::local_time::local_time_facet* lf(
  new boost::local_time::local_time_facet("%H-%M-%S")
);

msg.imbue(std::locale(msg.getloc(),lf));
msg << t;
Run Code Online (Sandbox Code Playgroud)

然后msg.str()比我想要的时间早一个小时.我不确定这是因为它显示UTC或本地时区没有DST校正时间(我在英国).

修改上述内容以获得DST更正的本地时区时间的最简单方法是什么?我知道它涉及boost::date_time:: c_local_adjustor但无法从示例中弄清楚.

c++ timezone debian boost boost-date-time

12
推荐指数
1
解决办法
2万
查看次数

unix时间戳来提升:: posix_time :: ptime

我需要将自纪元以来的秒数转换为ptime.我很确定必须有一个简单的方法来做到这一点,但我找不到任何东西.谢谢.

编辑:原始时间戳是浮点.我不能改变它,我不想失去亚秒精度.

c++ boost boost-date-time unix-timestamp

11
推荐指数
3
解决办法
2万
查看次数

C++:你会选择boost :: date_time或icu :: date/time库吗?

我的应用需要自定义时间和日期设置功能.我检查了ICU和boost :: date_time库.从完整性的角度来看,两者似乎都符合我的要求.我想知道两者之间是否有任何偏好以及基于什么?哪一个会在表现上得分?

c++ boost boost-date-time icu

11
推荐指数
1
解决办法
2833
查看次数

有没有办法确定日期/时间是否不存在?

有趣的事实是,我确信我们大多数人都能在时间领域发挥作用 - 有些日期/时间可能看似有效,但实际上并不存在,例如夏令时切换时间凌晨2:30.

在C++(标准或Windows)中是否有办法确定给定的时区规范中给定的日期/时间是否有效?

c++ windows time boost boost-date-time

10
推荐指数
1
解决办法
255
查看次数