【问题标题】:Date printing and scanning日期打印和扫描
【发布时间】:2015-02-05 15:20:35
【问题描述】:

我想以这种格式从单个变量/数组中的文本文件中读取日期:

Thu Feb 05 16:48:30 2015  

打印我用过的:

fprintf (savegame,"Played Date : %s ",ctime(&time1));

但是要扫描什么?

编辑:

好的。所以我可能说了一些非常错误的话,所以我会像从学校得到的任务一样重新表述......:

我有一个文本文件,其中包含:

 Played Date : Thu Feb 05 16:48:30 2015
 Played Date : Thu Jan 01 02:00:00 1970

我想把它们都放在一个变量中然后删除

 Played Date : 

打印它们并更新到当前日期。

有没有办法做到这一点?

编辑:我尝试过:

fscanf (savegame,"Played Date : %s ",ctime(&time1)); 

但是没用……

【问题讨论】:

标签: c file date printing


【解决方案1】:

在 POSIX 中,您可以使用 strptime() 将日期解析为 struct tm 类型的值。

您首先从文件中读取整行文本(fgets() 是最好的选择),然后将其传递给 strptime()

如果你有静态的非日期文本,你需要先跳过它。如果它是静态的,您只需将其长度添加到指向该行的指针,然后将其传递给strptime()。您也可以将格式字符串中的文本包含strptime(),它会被跳过。

【讨论】:

  • 是的,但我的文件有一些静态文本,例如:播放日期:2015 年 2 月 5 日星期四 16:48:30
  • @SzokeLori:如果你知道静态文本,你可以写成strptime()格式,它会读过去。
【解决方案2】:

您可以使用strftime() 打印任何日期时间格式,因此您可能会使用更方便的格式进行扫描。我想ctime() 取决于区域设置,因此在具有不同设置的不同 PC 上 WeekDay 和 Month 可以有不同的拼写(因为语言)。

但是对于您的格式,您可以使用(我的变量名应该更改):

      res = fscanf(FP,"%3s %3s %d %d:%d:%d %d",dayStr, monStr, &day, &hour, &min, &sec, &year);

然后检查格式

      if (res == 7) { .... }

【讨论】:

  • fscanf() 返回成功转换的次数(int)。
猜你喜欢
  • 1970-01-01
  • 2020-05-04
  • 2013-01-09
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多