c ++ Соответствующий тип возврата функции для возврата даты и времени? - PullRequest
2 голосов
/ 29 октября 2011

Исходя из C #, я довольно часто писал класс, который мог бы иметь DateTime в качестве возвращаемого типа (или параметра).Сейчас я программирую на C ++.Какой тип данных следует использовать в качестве возвращаемого значения метода, возвращающего значение datetime (time_t, tm struct, Boost.Date_Time , что-то еще?) Например:

class Customer
{
   ...
   ? GetDateTimeCreated() const;
   void SetLastContactDateTime(? date);
   ...
}

как насчет принятия даты / времени в качестве параметров функции?

Ответы [ 2 ]

2 голосов
/ 29 октября 2011

Если вы пишете библиотеку, а значение datetime будет представлено через API, тогда я бы использовал time_t, чтобы пользователи библиотеки не были вынуждены использовать Boost.

Как было указано, struct tm используется для форматирования time_t. Обычно вы не хотите обгонять их.

Если ваша программа уже использует Boost, и вам нравится удобство Boost.DateTime, то обязательно используйте Boost.DateTime. Если я правильно помню, boost::posix_time::ptime - это просто обертка вокруг двух 64-разрядных целых чисел, поэтому он достаточно легкий, чтобы обойти его по значению.

Если вы используете функции C ++ 11, вы можете использовать std::chrono::time_point из <chrono>. Если вы все еще на C ++ 03, вы можете использовать Boost.Chrono , который предназначен для реализации временных возможностей C ++ 11. Используя Boost.Chrono, вы сможете легче переключаться на C ++ 11 в будущем. Chrono не обладает таким количеством функций, как Boost.DateTime, но это шаг вперед по сравнению с простым старым time_t.

Если вам нужна точность менее секунды, тогда лучше использовать Boost.DateTime или Chrono.

2 голосов
/ 29 октября 2011

boost::posix_time::ptime от Boost.Date_Time является современным и полнофункциональным и является наиболее близким C ++ аналогом C # System.DateTime.

boost::posix_time::ptime и System.DateTime являются очень легкими структурами, которые просто оборачивают целое число без знака, поэтому они являются хорошими возвращаемыми значениями функции.

Одно небольшое отличие: boost::posix_time::ptime имеет микросекундную точность (по умолчанию, но точность может быть увеличена с помощью параметра шаблона), а System.DateTime имеет точность 100 наносекунд.

...