如何将纪元时间转换为年份

时间:2011-01-31 09:45:56

标签: c++ c

我有时间格式。
我只想从中检索年份。

我们应该如何在c或c ++中做到这一点?

实际上,我的时间已经过了几秒钟,我需要根据它来计算年龄 所以输入将是自纪元以来的秒数,并且输出应该是基于当前日期的年龄。

谢谢,
PP。

3 个答案:

答案 0 :(得分:6)

使用gmtimelocaltime函数将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的函数。

gmtimelocaltime是完成工作的两个C标准函数。

struct tm *date = gmtime( your_time );
printf( "Year = %d\n", date->tm_year );

警告这些函数不是线程安全的。你会在POSIX系统上找到一个可重入的版本(linux,mac os x,...):gmtime_rlocaltime_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,而不是一年。