【问题标题】:Convert date in string to Date changing format in C将字符串中的日期转换为C中的日期更改格式
【发布时间】:2014-04-03 08:12:19
【问题描述】:

我需要像这样解析一个字符串:

Apr 3, 2014 10:03:51 AM

到这样的事情:

YYYY-MM-DD HH:MM:SS

还有,这么长的:

1396682344000

到同一种字符串:

YYYY-MM-DD HH:MM:SS

是否有任何库或函数可以做到这一点?我写C不是很舒服,也不习惯解析这种字符串。

我用这个代码尝试了 strptime:

observationDate_message 是第一个字符串 (Apr 3, 2014 10:45:01 AM)

strptime(observationDate_message, "%G-%m-%d %r", &result);
    debugLog(DEB_INFO, "observationDateConverted: %d-%d-%d %d:%d:%d\n", result.tm_year, result.tm_mon, result.tm_mday, result.tm_hour, result.tm_min, result.tm_sec);

我得到的是:

0-52-0 36905376:32630:1497284224

教程; http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frtref%2Fstrpti.htm

【问题讨论】:

  • 为什么不在 C 中搜索日期时间函数?
  • 1396682344000 这个数字是多少?
  • 这是一个约会。它被称为到期日。但我无权访问发件人代码。我想可能是从开始日期算起的秒数。
  • 从现在起大约两天后,它看起来像一个以微秒为单位的 unix 时间戳。要获得正确的结果,您确实需要使用适当的时间库来获得正确的闰秒。

标签: c date


【解决方案1】:

检查你的系统是否有函数strptime。它是 POSIX 的一部分,将为您解析字符串。要进行相反方向的转换,可以使用 C 标准函数 strftime

【讨论】:

  • 我的系统有它,但我有问题。我用那个更新了我的问题
  • 嗯,看起来你的格式字符串到strptime 的布局与你实际传入的字符串完全不同。它可能返回了一个你没有检查的错误。
【解决方案2】:

你可以解析

Apr 3, 2014 10:03:51 AM

此字符串使用sscanf() 并获取年月日期和时间信息。 如果str 包含字符串,

sscanf(str,"%s %d, %d %d:%d:%d AM",month,&dd,&yy,&hh,&mm,&ss);

您可以从字符串中获取数据。这只是一个示例,您可以根据需要使用sscanf()从字符串中提取格式化数据

【讨论】:

  • 实现自己的时间解析通常不是一个好主意。时间真的很复杂,应该留给图书馆,那里有人花了几十年的时间来理解时区、不同日历、闰秒、不同时间标准等的所有问题。请不要自己处理时间,你会很长一段时间都没有把它弄好,当你这样做时,你的代码会像你没有使用的库一样复杂。
  • 这么说,你是指使用sscanf?
  • 我完全支持Art的说法。如果您有strptime() 可用,请使用它!不要重新发明轮子。
  • 我会检查的。你知道我该怎么做吗?我可以访问 ssh 连接,因此我可以执行任何操作。在 Linux 上工作
  • @Art- 来吧,它会正常工作,至少到 2016 年 2 月 28 日!
猜你喜欢
  • 2022-07-04
  • 2013-12-28
  • 2023-03-26
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多