如何在Lua中给定日期时间添加天数

4

我是Lua脚本的新手。我的系统运行在任何时区,但我需要我的新日期以GMT时区表示,同时给出的日期也应该是GMT时区的。

local creation_date = "2016-05-23 07:34:19"; //(This is in GMT date)

local yearValue, monthValue, dayValue,Hourvalue,Minutevalue,secondvalue = 
string.match(creation_date, '(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)')

dayValue, monthValue, yearValue,Hourvalue,Minutevalue,secondvalue = tonumber(dayValue), tonumber(monthValue), tonumber(yearValue),tonumber(Hourvalue),tonumber(Minutevalue),tonumber(secondvalue)

expiry_date = os.date("!%Y-%m-%d %H:%M:%S",os.time{year = yearValue, month = monthValue, day = dayValue,hour = Hourvalue,minute =Minutevalue,second = secondvalue}+10*24*60*60)

现在,每当我尝试打印到期日期时,必须打印。
   expiry_date ="2016-06-03 07:34:19" //(GIVEN DATE + 10 DAYS)

但实际上打印出来是下面这样的
   expiry_date = "2016-06-13 12:00:00"// (Wrong Date)

我知道Lua中有必要的功能来以我需要的方式打印日期,但是在Google上找不到。


2
106060只是将10个小时转换为秒。 - hjpotter92
好的,那是我的错误,让我添加天数而不仅仅是小时,但我的问题并没有显示出确切的时间,比如10个小时后,所以必须像2016-06-03 17:34:19这样显示,但当我执行上面的代码时却没有得到。有什么想法吗?有什么建议吗? - Ankit Doshi
请查看os.time的参数:https://devdocs.io/lua~5.3/index#pdf-os.time - hjpotter92
1个回答

2
我注意到两个可能会导致问题的地方,首先,10*60*60 不是10天的秒数,而只是10小时的秒数--您可能想要使用 10*24*60*60。第二个问题是您正在使用错误的字段来调用 os.time,正确的字段应该是 hourminsec
例如:
local creation_date = "2016-05-23 07:34:19" -- (This is in GMT date)

local y, m, d, Hr, Min, Sec = creation_date:match '(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)'

local exp_sec = os.time
    { year = y, month = m, day = d,
      hour = Hr, min = Min, sec = Sec } + 10*24*60*60

谢谢回复,让我试试这个。 - Ankit Doshi
我已经尝试了上面的代码,但它仍然显示了5小时的差异。我的真实例子是使用以上代码 creation_date=' 2017-01-04 08:14:17',却显示出 expiry_date= '2017-01-14 13:14:17',而不是应该是 expiry_date= '2017-01-14 08:14:17'。 - Ankit Doshi
那个 ! 符号正在将时间转换为普通的坐标,可能会影响输出的时间。尝试修改日期格式为 "%Y-%m-%d %H:%M:%S" - greatwolf

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