来自C#,我编写一个可能将DateTime作为返回类型(或参数)的类是很常见的。现在我用C ++编程。什么是适当的数据类型用作返回日期时间值的方法返回值(time_t,tm struct,Boost.Date_Time,还有其他什么?)例如:
class Customer
{
...
? GetDateTimeCreated() const;
void SetLastContactDateTime(? date);
...
}
另外,接受日期/时间作为功能参数呢?
答案 0 :(得分:2)
来自Boost.Date_Time的boost::posix_time::ptime
是现代且功能齐全的,是与C#System.DateTime
最接近的C ++模拟。
boost::posix_time::ptime
和System.DateTime
都是非常轻量级的结构,只包装无符号整数,因此它们是良好的函数返回值。
略有不同:boost::posix_time::ptime
具有微秒精度(默认情况下,但模板参数可以提高精度),System.DateTime
精度为100纳秒。
答案 1 :(得分:2)
如果您正在编写库,并且日期时间值将通过API公开,那么我将使用time_t
,以便库的用户不会被强制使用Boost。
正如所指出的,struct tm
用于格式化time_t
。你通常不想传递那些。
如果您的程序已经使用了Boost,并且您喜欢Boost.DateTime的便利性,那么请务必使用Boost.DateTime。如果我没记错的话,boost::posix_time::ptime
只是两个64位整数的包装器,因此它的重量足以传递值。
如果您正在使用C ++ 11功能,那么您可能希望使用<chrono>
中的std::chrono::time_point
。如果您仍然使用C ++ 03,则可以使用Boost.Chrono,它旨在实现C ++ 11时间工具。通过使用Boost.Chrono,您将来可以更轻松地切换到C ++ 11。 Chrono没有Boost.DateTime那么多的功能,但它比普通的time_t
提升了一步。
如果你需要亚秒精度,那么Boost.DateTime或Chrono就是你的选择。