我有一个字符串10131520,我试图在C中转换为Unix Epoch时间。如果数字像10-13-1520那样分开,我可以使用像strptime()这样的东西,但我遇到了麻烦,因为那里不是分手。我正在考虑通过读取前2位并将它们存储到月份变量中来分割位,然后将下两位存储到白天,然后将最后4位存储到时间中。
如果有人能指出我正确的方向,我会非常感激。
谢谢
答案 0 :(得分:0)
这个作品,有不同的方式,这是一种简单易懂的方式。
#include <stdio.h>
#include <string.h>
// to change 10131520 into 10-13-1520
main( )
{
char string[] = "10131520";
char stringout[11];
char year_str[5];
char month_str[3];
char day_str[3];
month_str[0] = string[0];
month_str[1] = string[1];
month_str[2] = '\0';
day_str[0] = string[2];
day_str[1] = string[3];
day_str[2] = '\0';
year_str[0] = string[4];
year_str[1] = string[5];
year_str[2] = string[6];
year_str[3] = string[7];
year_str[4] = '\0';
strcpy( stringout, month_str );
strcat( stringout, "-" );
strcat( stringout, day_str );
strcat( stringout, "-" );
strcat( stringout, year_str );
printf( "\n the date is %s", stringout );
getchar( );
}
答案 1 :(得分:0)
首先,从字符串中获取年,月,日:
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年。(这就是我在这里继续使用双倍的原因。)