如何在 Lua 中设置默认时区?

How can I set the default timezone in Lua?

我可以像 PHP

一样在 Lua 中设置默认时区吗
date_default_timezone_set("Europe/London");
$Year = date('y');
$Month = date('m');
$Day = date('d');
$Hour = date('H');
$Minute = date('i'); 

我认为最简单的方法是在Lua开始的环境中设置它。
在类似 Unix 的操作系统上,我的意思是...

€ date
Do 7. Apr 07:25:53 CEST 2022
€ env -i TZ=Europe/London lua -e "print(os.date())"
Thu Apr  7 06:26:47 2022
€ env -i TZ=Europe/Berlin lua -e "print(os.date())"
Thu Apr  7 07:26:58 2022

不过可以随意写一个时间模块。
可能看起来像...

€ env -i TZ=Europe/London lua -e "tzdate = setmetatable({}, {__index = {Berlin = function() return os.date(_, os.time() + 3600) end}}) print(tzdate.Berlin())"
Thu Apr  7 07:41:03 2022

并且没有 env -i TZ= 和 @Egor Skriptunoff' 提示一个简单的,嗯,它怎么能被称为,也许是 Prototype?

$ /bin/lua -i
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> tzdate = setmetatable({[0] = 7200}, {__tostring = function(self) return os.date('!%c', os.time() + self[#self]) end})
> print(tzdate)
Thu Apr  7 20:42:01 2022
> tzdate[1]=3600
> print(tzdate)
Thu Apr  7 19:42:43 2022
> tzdate[2]=7200
> print(tzdate)
Thu Apr  7 20:43:21 2022

这在自动转换 tostring()print() 完成时有效。
因此,要获取变量中的值或做其他不自动转换的事情 tostring()...

> tzdate[3]=10800
> io.write(tzdate)
stdin:1: bad argument #1 to 'write' (string expected, got table)
stack traceback:
        [C]: in function 'write'
        stdin:1: in main chunk
        [C]: ?
> io.write(tostring(tzdate), '\n')
Thu Apr  7 21:59:40 2022