获取当前区域设置的日期格式

7
当我第一次遇到位于System.Locale中的常量defaultTimeLocale时,我认为它应该包含当前语言环境的默认TimeLocale
尝试过后,我发现它始终包含相同的常量,并且查看System.Locale源代码很快就揭示了它实际上只是一个常量。(后来我意识到类型也告诉我这一点。由于defaultTimeLocale不是IO值并且不接受任何参数,它必须是常量。)
在Haskell中,以当前语言环境为基准获取当前TimeLocale的方法是什么?
1个回答

2
System.CurrentLocale.currentLocale :: IO TimeLocale

来自current-locale包的内容看起来很合适。

我没有测试过它。从其源代码来看,它应该可以工作。实际上,我并不是很喜欢它,因为在其底层会派生四个date子进程(!),对于这个简单的任务来说,这相当于杀鸡焉用牛刀。

可能可以重写以使用一些C或POSIX函数。


2
生成日期进程的问题更加严重,因为它似乎只能与GNU日期版本一起使用。(在Mac上失败) - Kritzefitz
2
@Kritzefitz,它确实需要被重写。你可以尝试编写相关的C绑定(可能只有一个函数),或者看看是否有其他软件包具有更好的区域设置处理方式--不过我没有找到任何东西。 - chi
1
我发现C语言有strftime函数,其中有格式项%D,可以根据当前区域设置格式化日期。Haskell的format函数也有相同的格式项,但它会根据给定的TimeLocale格式化日期。我没有找到一个C函数来获取当前的格式。 - Kritzefitz
此外,它的TimeLocale不是Data.Time.Format所接受的。 - Simon Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接