V>в общем-то boost::date_time поддерживает и 1 и 2, и на счет использования тож не вижу проблем. напиши конкретнее какая у тебя задача — что не знаешь как сделать с помощью boost::date_time?
Например, есть вот такая реализация функции на ATL, которая определяет количество дней от определенной даты:
int getDeltaDaysFromCurrentTime(int year, int month, int day, int hour, int minute, int second)
{
return (ATL::COleDateTime::GetCurrentTime() - ATL::COleDateTime(year, month, day, hour, minute, second)).GetTotalDays();
}
Она всем устаривает, единственный недостаток — не межплатформенное решение.
Если переписать на boost::date_time, то получится:
int getDeltaDaysFromCurrentTime(int year, int month, int day, int hour, int minute, int second)
{
return (boost::posix_time::second_clock::local_time() - boost::posix_time::ptime(
boost::gregorian::date(year, month, day),
boost::posix_time::time_duration(hour, minute, second)))
.total_seconds() / 3600 / 24;
}
Здесь ряд недостатков:
1. Реализация очень усложнена. Есть second_clock::local_time, date, time_duration, а в самом коде библиотеки сходу нельзя разобраться, в отличии от ATL.
2. Тип ptime не прозрачен, почему бы не сделать просто time, который бы состоял из date и time_duration. Очевидно это нужно для нормализации представления архитектуры библиотеки. А если мне нужен простенький класс для несложных задач?
3. И пожалуй самый главный недостаток: арифметические операции. Да еще усугубляется магическими числами.
Оказывается, что в С++0х получится не намного лучше:
int getDeltaDaysFromCurrentTime(int year, int month, int day, int hour, int minute, int second)
{
struct tm t = { second, minute, hour, day, month, year };
return (std::get_system_time() - std::system_time(std::mktime(&t)))
/ std::nanosecond::ticks_per_second / std::hour::hours_per_tick / 24 ;
}
Тоже, что и boost::date_time, но библиотека должна быть в реализации попроще — как легкий враппер над time_t.
Так что, чувствую, прийдется изобретать свой велосипед