comparison src/luan/modules/Time.luan @ 1079:53e77f60b789

add Time.count
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 10 Nov 2016 21:15:28 -0700
parents 1a68fc55a80c
children aa967fd73b80
comparison
equal deleted inserted replaced
1078:99f1c125926f 1079:53e77f60b789
2 2
3 java() 3 java()
4 local Luan = require "luan:Luan.luan" 4 local Luan = require "luan:Luan.luan"
5 local error = Luan.error 5 local error = Luan.error
6 local ipairs = Luan.ipairs or error() 6 local ipairs = Luan.ipairs or error()
7 local Math = require "luan:Math.luan"
8 local floor = Math.floor or error()
7 local Table = require "luan:Table.luan" 9 local Table = require "luan:Table.luan"
8 local System = require "java:java.lang.System" 10 local System = require "java:java.lang.System"
9 local Calendar = require "java:java.util.Calendar" 11 local Calendar = require "java:java.util.Calendar"
10 local Date = require "java:java.util.Date" 12 local Date = require "java:java.util.Date"
11 local TimeZone = require "java:java.util.TimeZone" 13 local TimeZone = require "java:java.util.TimeZone"
27 function M.get( time, ... ) 29 function M.get( time, ... )
28 local cal = Calendar.getInstance() 30 local cal = Calendar.getInstance()
29 cal.setTimeInMillis(time) 31 cal.setTimeInMillis(time)
30 local rtn = {} 32 local rtn = {}
31 for i, v in ipairs{...} do 33 for i, v in ipairs{...} do
32 local fld = fields[v.lower()] 34 local fld = fields[v]
33 fld or error("invalid field: "+v) 35 fld or error("invalid field: "..v)
34 local n = cal.get(fld) 36 local n = cal.get(fld)
35 if fld == "month" then 37 if fld == "month" then
36 n = n + 1 38 n = n + 1
37 end 39 end
38 rtn[i] = n 40 rtn[i] = n
66 68
67 function M.parse( pattern, source ) 69 function M.parse( pattern, source )
68 return SimpleDateFormat.new(pattern).parse(source).getTime() 70 return SimpleDateFormat.new(pattern).parse(source).getTime()
69 end 71 end
70 72
73
74 local count_times = {
75 days = M.period{days=1}
76 hours = M.period{hours=1}
77 minutes = M.period{minutes=1}
78 seconds = M.period{seconds=1}
79 }
80
81 function M.count( time, ... )
82 local cal = Calendar.getInstance()
83 cal.setTimeInMillis(time)
84 local rtn = {}
85 for i, v in ipairs{...} do
86 local t = count_times[v]
87 t or error("invalid field: "..v)
88 rtn[#rtn+1] = floor(time/t)
89 time = time%t
90 end
91 rtn[#rtn+1] = time
92 return Table.unpack(rtn)
93 end
94
95
71 return M 96 return M