Hum*_*ger 3 c++ time-t boost-date-time unix-timestamp timeval
给定time_t或struct timeval,如何在当天获得EST/EDT午夜(当地时区)的timeval或time_t?假设当地时区为EST/EDT,给定time_t对应于美国东部时间/美国东部时间2010-11-30 08:00:00,预期答案为time_t,对应于2010-11-30 00:00:00 EST /美东时间
尝试1(错误:因为它不处理DST,并假设EST/EDT总是落后于UTC 5小时):
time_t RewindToMidnight ( const time_t temp_time_t_ )
{
return ( (5*3600) + ((( temp_time_t_ - 5*3600 )/86400 ) * 86400) );
}
Run Code Online (Sandbox Code Playgroud)
尝试2(错误:因为它返回的time_t对应于午夜时间而不是EST/EDT,本地时区):
time_t RewindToMidnight ( const time_t temp_time_t_ )
{
boost::posix_time::ptime temp_ptime_ = boost::posix_time::from_time_t ( temp_time_t_ );
boost::gregorian::date temp_date_ = temp_ptime_.date();
boost::posix_time::ptime temp_ptime_midnight_ ( temp_date_,
boost::posix_time::time_duration ( 0, 0, 0 ) );
return to_time_t ( temp_ptime_midnight_ );
}
time_t to_time_t ( const boost::posix_time::ptime & temp_ptime_ )
{
boost::posix_time::ptime temp_epoch_ptime_(boost::gregorian::date(1970,1,1));
boost::posix_time::time_duration::sec_type temp_sec_type_ = ( temp_ptime_ - temp_epoch_ptime_ ).total_seconds();
return time_t ( temp_sec_type_ );
}
Run Code Online (Sandbox Code Playgroud)
我觉得应该有一个解决方案,包括(i)struct tm,mktime或(ii)boost :: local_date_time?
由于time_t是自Epoch(1970年1月1日00:00:00 UTC)以来的秒数,您只需要摆脱一天中的秒数.一天有86400秒(通常忽略闰秒),因此结果应该是86400的倍数.因此:
time_t now = time();
time_t midnight = now / 86400 * 86400
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4206 次 |
| 最近记录: |