我有时间格式。
我只想从中检索年份。
我们应该如何在c或c ++中做到这一点?
实际上,我的时间已经过了几秒钟,我需要根据它来计算年龄 所以输入将是自纪元以来的秒数,并且输出应该是基于当前日期的年龄。
谢谢,
PP。
答案 0 :(得分:6)
使用gmtime
或localtime
函数将time_t
转换为struct tm
。然后,您可以使用结构的tm_year
字段来获取年份。
或者,对于离线使用,您可以使用网络转换器like this。
修改强>
示例代码:
time_t nowEpoch = time(NULL);
struct tm* nowStruct = gmtime(&nowEpoch);
int year = nowStruct->tm_year + 1900;
答案 1 :(得分:4)
在C时间戳(即:纪元的秒数)通常存储在time_t
中,而人类明确的日期存储在结构tm
中。您需要一个能够在time_t
s中转换tm
的函数。
gmtime
或localtime
是完成工作的两个C标准函数。
struct tm *date = gmtime( your_time );
printf( "Year = %d\n", date->tm_year );
警告这些函数不是线程安全的。你会在POSIX系统上找到一个可重入的版本(linux,mac os x,...):gmtime_r
和localtime_r
答案 2 :(得分:1)
实际上我有时间,因为时间秒,我需要根据它来计算年龄。 所以输入将是自纪元以来的秒数,并且输出应该是基于当前日期的年龄。
您不需要任何时间戳的年,月,日。减去两个纪元时间以获得以秒为单位的值。将60 * 60 * 24 * 365除以get a value in years:
int main() {
time_t past = 1234567890;
time_t now = time(0);
double years = double(now - past) / 60 / 60 / 24 / 365;
cout << "years = " << years << '\n';
return 0;
}
这将在两个时间戳之间发生的任何闰秒关闭,但是,显着地,它在一年内提供正确的值。例如,2010年12月1日至2011年1月1日大约是一年的1/12,而不是一年。