Lua中日期和时间的表示方式

方式1:数字

  • 一个整数:从固定纪元的固定日期至今秒数,

    • 固定日期:Jan 01,1970,0:00 UTC

      方式2:日期表

  • 有以下字段:year、month、day、hour、min、sec、wday、yday和isdst,除isdst外都为整型

    • wday:本周的第几天(第一天为星期天
    • yday:当年的第几天(第一天为1月1日)
    • isdst:布尔类型
      • true:使用夏令时
  • 注:日期表中不包括时区

os.time():获得数字型时间

  • os.time([table]):获得table中所设定时间Jan 01,1970,0:00 UTC 所差秒数默认则是当前时间距 Jan 01,1970,0:00 UTC 秒数
    • table:可选参数,类型为table,内容对应日期表:year、month、day、hour、min、sec、wday、yday和isdst
      • 注:传入日期表时,字段不需要归一化,会字自动处理
      • year、month和day是必须的
      • hour、min和sec没有使用,则默认使用12:00:00

        归一化

  1. 时间表上对日期的操作,
  2. 将时间表转化为数字型时间
  3. 将数字型时间转换为table
  4. 此时获得的时间表是对时间进行进位处理过后的时间表 ```lua -local timeNum = 906000490 local timeTable = os.date(“*t”, timeNum) —将数字型时间转换为时间表 print(os.date(“%Y/%m/%d”, os.time(timeTable))) —使用”%Y/%m/%d”格式输出当前时间 —输出:1998/09/17

timeTable.day = timeTable.day + 40 —将天数加40 print(os.date(“%Y/%m/%d”, os.time(timeTable))) —进行了归一化处理 输出:1998/10/27

  1. <a name="SJDOm"></a>
  2. # os.date():获得格式化日期
  3. - **os.date([format][,time])**:将表示日期和时间的数字**转换**为**高级的表示形式**
  4. - format:可选参数,描述**期望**表示形式**的格式化字符**
  5. - **使用"*t":可生成一个完整的日期表**
  6. | 获得日期表中字段的范围 | | | |
  7. | --- | --- | --- | --- |
  8. | year(年) | 一整年 | min(分钟) | 0~59 |
  9. | month(月) | 1~12 | sec(秒) | 0~60(允许润秒存在) |
  10. | day(日) | 1~31 | wday | 1~7 |
  11. | hour(小时) | 0~23 | yday | 1~366 |
  12. - time:可选参数,**数字形式**的日期和时间,不使用则默认为当前时间
  13. | format中的指示符 | | | |
  14. | --- | --- | --- | --- |
  15. | %a | 星期几的简单写(如:Wed) | %M | 分钟(范围[00,59]) |
  16. | %A | 星期几的全名(如:Wednesday) | %p | "am"或"pm" |
  17. | %b | 月份的简写(如:Sep) | %S | 秒数(范围[00,60]) |
  18. | %B | 月份的全名(如:September) | %w | 星期(0-6 → Sunday-Saturday) |
  19. | %c | 日期和时间(如:09/16/98 23:48:10) | %W | 一年中的第几周(范围[00,53]) |
  20. | %d | 一个月的第几天(范围[01,21]) | %x | 日期(如:09/16/98) |
  21. | %H | 24小时制中的小时数(范围[00,23]) | %X | 时间(如:23:48:10) |
  22. | %I | 12小时制中的小时数(范围[01,12]) | %y | 两位数的年份(范围[00,99]) |
  23. | %j | 一年中的第几天(范围[001,365]) | %Y | 完整的年份(如:2008) |
  24. | %m | 月份(范围[01,12]) | %z | 时区(如:-0300) |
  25. | %% | 百分号 | | |
  26. ```lua
  27. local timeNum=906000490 --设定数子型时间
  28. print(os.date("%Y-%m-%d",timeNum)) --输出:1998-09-17
  29. print(os.date("%Y/%m/%d")) --输出:2021/12/07

os.difftime():计算时间之差

  • os.difftime(t1,t2):计算两个时间差值,以为单位返回
    • t1、t2:为os.time所返回的的秒数
    • 即t1-t2 ```lua local timeTable1 = {year = 2000, month = 1, day = 1, hour = 0} local timeTable2 = {year = 2015, month = 11, day = 20} local time1 = os.time(timeTable1) local time2 = os.time(timeTable2)

print(os.difftime(time1, time2)) —输出:-501336000.0 print(os.difftime(time2, time1)) —输出:501336000.0

  1. os.clock():返回程序消耗的CPU时间
  2. - os.clock():返回程序消耗CPU的时间(单位是秒)
  3. - 注:比os.time有更高的进度,返回的是一个浮点数,有毫秒的精度
  4. ```lua
  5. --典型的测试性能用法
  6. local x = os.clock()
  7. s = 0
  8. for i = 1, 10000000 do
  9. s = s + i
  10. end
  11. print(os.clock()) --输出:0.15