【发布时间】:2011-02-16 05:28:40
【问题描述】:
我应该调用什么 C 函数来获取程序正在执行的语言环境的格式化日期和时间?
我问这个问题是因为我在使用 ClamAV 守护程序 API 时遇到了问题。 VERSION 命令返回最新病毒定义的日期和时间,但代码使用对ctime 的调用来格式化它。据我所知,ctime 没有根据当前区域设置格式化日期时间,而是在返回的字符串中使用英文缩写表示星期几和月份。这会导致问题,因为我的 Java 程序使用 ClamAV API确实尊重当前的语言环境,因此希望星期几和月份名称具有本地缩写。
日期时间格式需要与ctime生成的格式相同:
Www Mmm dd hh:mm:ss yyyy
其中 Www 是工作日,Mmm 是月份,dd 是月份中的日期,hh:mm:ss 是时间,yyyy 是年份。
我可以重写 Java 程序以始终假定英文日期,但我更乐意向 ClamAV 提交补丁,因为这对我来说似乎是他们这边的一个错误。
【问题讨论】:
-
是的,ctime 不会创建本地化的日期/时间字符串,它会调用 asctime 来创建美国格式的字符串,但您为什么认为这是一个错误?我认为如果有一些实用程序可以解析日期/时间字符串以比较日期,那么保持一种格式会更容易(即使数字版本会更好)。
-
但这意味着所有使用非美国语言环境的 ClamAV API 用户都必须使用美国语言环境专门解析日期。这在 Java 中很容易做到,但在其他语言中可能很难做到?手动操作会很烦人,特别是如果您不会说英语并且必须查找所有名称和缩写。
-
话虽如此,我可能会修改我们的代码并提交错误报告/补丁,看看 ClamAV 开发人员怎么说。
-
如果 ClamAV API 以独立于语言环境的格式提供日期/时间,这似乎是最好的 - 就像一个很好的旧 UNIX 纪元时间戳。
-
由于当前 VERSION 命令不带任何参数,您可以添加可选的“tsformat=UNIX”参数或类似参数。
标签: c datetime formatting locale ctime