首先,从字符串中获取年、月和日:
char my_date="10131520";
int my_date_n=atoi(my_date); // or any better method
int month = (my_date_n/1000000)%100;
int day = (my_date_n/ 10000)%100;
int year = (my_date_n/ 1)%10000;
(有很多方法可以做到这一点。这可能不是最好的。)
然后,通常对于遥远的日期,您会使用儒略日:
https://en.wikipedia.org/wiki/Julian_day#Converting_Julian_or_Gregorian_calendar_date_to_Julian_Day_Number
例如:
double calc_jd(int y, int mo, int d,
int h, int mi, float s)
{
// variant using ints
int A=(14-mo)/12;
int Y=y+4800-A;
int M=mo+12*A-3;
int JD=d + ((153*M+2)/5) + 365*Y + (Y/4) - (Y/100) + (Y/400) - 32045;
// add time of day at this stage
return JD + (h-12)/24.0 + mi/1440.0 + s*(1.0/86400.0);
}
然后你将这个转换为unix时间,这与这个问题的答案相反:
Convert unix timestamp to julian
double unix_time_from_jd(double jd)
{
return (jd-2440587.5)*86400.0;
}
所以
double jd = calc_jd(year,month,day,12,0,0); // time of day, timezone?
double unix_time = unix_time_from_jd(jd);
请注意,您可能会超出可以使用的任何范围
如果我们谈论的是使用这种日期的普通工具
1520 年。(这就是我在这里一直使用双精度的原因。)