如何在 C 中将 10131520 转换为 Unix 纪元时间?

Posted

技术标签:

【中文标题】如何在 C 中将 10131520 转换为 Unix 纪元时间?【英文标题】:How Can I Convert 10131520 Into Unix Epoch Time In C? 【发布时间】:2016-01-20 01:43:38 【问题描述】:

我有一个字符串 10131520,我正在尝试将其转换为 C 中的 Unix 纪元时间。如果数字像 10-13-1520 这样分开,我可以使用类似 strptime() 的东西,但我遇到了麻烦,因为没有分隔符。我正在考虑可能通过读取前 2 位并将它们存储到一个月变量中来拆分这些位,然后将接下来的 2 位存储到一天中,然后将最后 4 位存储到时间中。

如果有人能指出我正确的方向,我将不胜感激。

谢谢

【问题讨论】:

它的字节,而不是位。只需使用其中一个字符串函数来提取您需要的值并将其转换为 strptime 所需的形式。 你试过“%m%d%Y”作为一种格式吗?我认为 strptime() 不需要分隔符。但它不适用于 1520 年。字符串真的是 MMDDYYYY 格式还是示例选择不当? 【参考方案1】:

这行得通,有不同的方法,这是一种简单易懂的方法。

#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(  );

【讨论】:

【参考方案2】:

首先,从字符串中获取年、月和日:

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 年。(这就是我在这里一直使用双精度的原因。)

【讨论】:

以上是关于如何在 C 中将 10131520 转换为 Unix 纪元时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何在C中将char转换为整数? [复制]

如何在目标 c 中将 NSString 转换为 NSDictionary?

如何在 C 中将 short 转换为 unsigned char *buf?

如何在目标 C 中将 NSInteger 值转换为 int 值? [复制]

如何在目标 C 中将字符串转换为整数? [复制]

如何在c ++中将数组字节转换为字符串?