annotate src/luan/modules/Time.luan @ 1353:8d95711f6615

replace java() with require "java"
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 20 Mar 2019 17:03:29 -0600
parents 1f9d34a6f308
children 2b4471d310b3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
254
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
1 -- incomplete, will add as needed
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
1353
8d95711f6615 replace java() with require "java"
Franklin Schmidt <fschmidt@gmail.com>
parents: 1164
diff changeset
3 require "java"
693
ca169567ce07 module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents: 610
diff changeset
4 local Luan = require "luan:Luan.luan"
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 321
diff changeset
5 local error = Luan.error
610
b4f3dbe1c6e3 add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents: 587
diff changeset
6 local ipairs = Luan.ipairs or error()
1079
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
7 local Math = require "luan:Math.luan"
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
8 local floor = Math.floor or error()
1164
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1098
diff changeset
9 local Number = require "luan:Number.luan"
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1098
diff changeset
10 local long = Number.long or error()
693
ca169567ce07 module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents: 610
diff changeset
11 local Table = require "luan:Table.luan"
321
7f7708e8fdd4 remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 320
diff changeset
12 local System = require "java:java.lang.System"
7f7708e8fdd4 remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 320
diff changeset
13 local Calendar = require "java:java.util.Calendar"
7f7708e8fdd4 remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 320
diff changeset
14 local Date = require "java:java.util.Date"
7f7708e8fdd4 remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 320
diff changeset
15 local TimeZone = require "java:java.util.TimeZone"
7f7708e8fdd4 remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 320
diff changeset
16 local SimpleDateFormat = require "java:java.text.SimpleDateFormat"
254
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
17
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
18 local Time = {}
254
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
19
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
20 function Time.now()
254
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
21 return System.currentTimeMillis()
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
22 end
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
23
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
24 -- add more as needed
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
25 local fields = {
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
26 year = Calendar.YEAR;
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
27 month = Calendar.MONTH;
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
28 day_of_month = Calendar.DAY_OF_MONTH;
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
29 }
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
30
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
31 function Time.get( time, ... )
254
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
32 local cal = Calendar.getInstance()
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
33 cal.setTimeInMillis(time)
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
34 local rtn = {}
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
35 for i, v in ipairs{...} do
1079
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
36 local fld = fields[v]
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
37 fld or error("invalid field: "..v)
254
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
38 local n = cal.get(fld)
1097
b2e4a22ffa5d fix Time bugs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1088
diff changeset
39 if v == "month" then
254
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
40 n = n + 1
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
41 end
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
42 rtn[i] = n
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
43 end
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
44 return Table.unpack(rtn)
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
45 end
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
46
1098
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
47 -- Time.time_zone set for other than default
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
48
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
49 function Time.get_time_zone()
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
50 local tz = Time.time_zone and TimeZone.getTimeZone(Time.time_zone) or TimeZone.getDefault()
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
51 return tz.getID().." - "..tz.getDisplayName()
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
52 end
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
53
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
54 local function set_time_zone(fmt)
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
55 Time.time_zone and fmt.setTimeZone( TimeZone.getTimeZone(Time.time_zone) )
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
56 end
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
57
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
58 function Time.format(time,pattern)
1164
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1098
diff changeset
59 time = long(time)
587
Franklin Schmidt <fschmidt@gmail.com>
parents: 503
diff changeset
60 pattern = pattern or "yyyy-MM-dd HH:mm:ss"
1098
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
61 local fmt = SimpleDateFormat.new(pattern)
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
62 set_time_zone(fmt)
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
63 return fmt.format(Date.new(time))
254
e0fb8a49e031 add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
64 end
256
15122d724ce4 more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 254
diff changeset
65
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
66 function Time.on( year, month, day, hour, minute, second, millis )
256
15122d724ce4 more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 254
diff changeset
67 month = month - 1
15122d724ce4 more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 254
diff changeset
68 local cal = Calendar.getInstance()
1097
b2e4a22ffa5d fix Time bugs
Franklin Schmidt <fschmidt@gmail.com>
parents: 1088
diff changeset
69 -- cal.setLenient(false)
256
15122d724ce4 more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 254
diff changeset
70 cal.set( year, month, day, hour or 0, minute or 0, second or 0 )
15122d724ce4 more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 254
diff changeset
71 cal.set( Calendar.MILLISECOND, millis or 0 )
15122d724ce4 more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 254
diff changeset
72 return cal.getTimeInMillis()
15122d724ce4 more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 254
diff changeset
73 end
15122d724ce4 more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 254
diff changeset
74
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
75 function Time.period( t )
290
9a0cc6d9b27b add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 283
diff changeset
76 local cal = Calendar.getInstance()
9a0cc6d9b27b add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 283
diff changeset
77 cal.setTimeZone(TimeZone.getTimeZone("GMT"))
715
a82d385ec2c3 add Thread.schedule() and improve Time.period()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
78 local days = t.days or 0
290
9a0cc6d9b27b add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 283
diff changeset
79 days = days + 1
715
a82d385ec2c3 add Thread.schedule() and improve Time.period()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
80 cal.set( 1970, 0, days, t.hours or 0, t.minutes or 0, t.seconds or 0 )
a82d385ec2c3 add Thread.schedule() and improve Time.period()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
81 cal.set( Calendar.MILLISECOND, t.millis or 0 )
290
9a0cc6d9b27b add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 283
diff changeset
82 return cal.getTimeInMillis()
9a0cc6d9b27b add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 283
diff changeset
83 end
9a0cc6d9b27b add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 283
diff changeset
84
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
85 function Time.parse( pattern, source )
1098
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
86 local fmt = SimpleDateFormat.new(pattern)
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
87 set_time_zone(fmt)
bae624e455e2 add Time.time_zone
Franklin Schmidt <fschmidt@gmail.com>
parents: 1097
diff changeset
88 return fmt.parse(source).getTime()
256
15122d724ce4 more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 254
diff changeset
89 end
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 321
diff changeset
90
1079
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
91
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
92 local count_times = {
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
93 days = Time.period{days=1}
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
94 hours = Time.period{hours=1}
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
95 minutes = Time.period{minutes=1}
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
96 seconds = Time.period{seconds=1}
1079
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
97 }
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
98
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
99 function Time.count( time, ... )
1079
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
100 local cal = Calendar.getInstance()
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
101 cal.setTimeInMillis(time)
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
102 local rtn = {}
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
103 for i, v in ipairs{...} do
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
104 local t = count_times[v]
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
105 t or error("invalid field: "..v)
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
106 rtn[#rtn+1] = floor(time/t)
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
107 time = time%t
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
108 end
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
109 rtn[#rtn+1] = time
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
110 return Table.unpack(rtn)
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
111 end
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
112
53e77f60b789 add Time.count
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
113
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 1084
diff changeset
114 return Time