Mercurial Hosting > luan
annotate src/luan/modules/Time.luan @ 1416:db57d562c4bd
add Http.is_hosted
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 18 Oct 2019 15:06:32 -0600 |
parents | 8d95711f6615 |
children | 2b4471d310b3 |
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 | 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 | 7 local Math = require "luan:Math.luan" |
8 local floor = Math.floor or error() | |
1164 | 9 local Number = require "luan:Number.luan" |
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 | 36 local fld = fields[v] |
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 | 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 | 47 -- Time.time_zone set for other than default |
48 | |
49 function Time.get_time_zone() | |
50 local tz = Time.time_zone and TimeZone.getTimeZone(Time.time_zone) or TimeZone.getDefault() | |
51 return tz.getID().." - "..tz.getDisplayName() | |
52 end | |
53 | |
54 local function set_time_zone(fmt) | |
55 Time.time_zone and fmt.setTimeZone( TimeZone.getTimeZone(Time.time_zone) ) | |
56 end | |
57 | |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
58 function Time.format(time,pattern) |
1164 | 59 time = long(time) |
587 | 60 pattern = pattern or "yyyy-MM-dd HH:mm:ss" |
1098 | 61 local fmt = SimpleDateFormat.new(pattern) |
62 set_time_zone(fmt) | |
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 | 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 | 86 local fmt = SimpleDateFormat.new(pattern) |
87 set_time_zone(fmt) | |
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 | 90 |
1079 | 91 |
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 | 97 } |
98 | |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
99 function Time.count( time, ... ) |
1079 | 100 local cal = Calendar.getInstance() |
101 cal.setTimeInMillis(time) | |
102 local rtn = {} | |
103 for i, v in ipairs{...} do | |
104 local t = count_times[v] | |
105 t or error("invalid field: "..v) | |
106 rtn[#rtn+1] = floor(time/t) | |
107 time = time%t | |
108 end | |
109 rtn[#rtn+1] = time | |
110 return Table.unpack(rtn) | |
111 end | |
112 | |
113 | |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
114 return Time |