如何不受系统设置影响,显式指定日期时间格式(Lua/C#)
问题描述
使用Lua的os.date("%b")时,输出结果会受操作系统区域设置影响:
- 系统设为英文时,输出
"Oct" - 系统设为瑞典语时,输出
"okt"
想知道有没有无需自行编写函数的方法,能不受系统设置影响,显式指定日期时间格式,实现和以下C#代码相同的效果:
CultureInfo myCI = new CultureInfo("sv-SE"); Console.WriteLine(DateTime.Now.ToString("MMM", myCI));
解决方案
标准Lua的os.date函数本身不支持显式指定区域文化,它完全依赖操作系统的区域设置生成本地化日期字符串。如果不想自行编写本地化日期处理函数,有两种可行方案:
- 使用Lua扩展库(如
luatz或date库),这类库内置多区域日期本地化数据,可直接指定区域代码生成对应格式的日期字符串。例如用luatz实现:local luatz = require 'luatz' local dt = luatz.now() print(dt:format("%b", "sv_SE")) - 借助系统命令行工具,通过指定区域参数获取格式化后的日期,再在Lua中调用读取输出。例如Linux平台:
local handle = io.popen('LC_TIME=sv_SE date +"%b"') local result = handle:read("*a") handle:close() print(result:gsub("%s+", "")) -- 去除多余换行符
注意:扩展库需提前安装,系统命令行方案依赖目标平台支持,无法做到跨平台完全一致。
内容的提问来源于stack exchange,提问作者Per Ljung
相关产品推荐
相关产品推荐

