Mercurial Hosting > luan
annotate src/luan/modules/Time.luan @ 1801:32e77b071e09 default tip
webserver logging
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 12 Mar 2024 09:28:39 -0600 |
parents | 2b4471d310b3 |
children |
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 |
1546
2b4471d310b3
better time zone handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1353
diff
changeset
|
47 function Time.get_time_zone(name) |
2b4471d310b3
better time zone handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1353
diff
changeset
|
48 local tz = name and TimeZone.getTimeZone(name) or TimeZone.getDefault() |
1098 | 49 return tz.getID().." - "..tz.getDisplayName() |
50 end | |
51 | |
1546
2b4471d310b3
better time zone handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1353
diff
changeset
|
52 local function set_time_zone(fmt,time_zone) |
2b4471d310b3
better time zone handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1353
diff
changeset
|
53 time_zone and fmt.setTimeZone( TimeZone.getTimeZone(time_zone) ) |
1098 | 54 end |
55 | |
1546
2b4471d310b3
better time zone handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1353
diff
changeset
|
56 function Time.format( time, pattern, time_zone ) |
1164 | 57 time = long(time) |
587 | 58 pattern = pattern or "yyyy-MM-dd HH:mm:ss" |
1098 | 59 local fmt = SimpleDateFormat.new(pattern) |
1546
2b4471d310b3
better time zone handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1353
diff
changeset
|
60 set_time_zone(fmt,time_zone) |
1098 | 61 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
|
62 end |
256
15122d724ce4
more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
254
diff
changeset
|
63 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
64 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
|
65 month = month - 1 |
15122d724ce4
more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
254
diff
changeset
|
66 local cal = Calendar.getInstance() |
1097 | 67 -- cal.setLenient(false) |
256
15122d724ce4
more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
254
diff
changeset
|
68 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
|
69 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
|
70 return cal.getTimeInMillis() |
15122d724ce4
more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
254
diff
changeset
|
71 end |
15122d724ce4
more Time functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
254
diff
changeset
|
72 |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
73 function Time.period( t ) |
290
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
283
diff
changeset
|
74 local cal = Calendar.getInstance() |
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
283
diff
changeset
|
75 cal.setTimeZone(TimeZone.getTimeZone("GMT")) |
715
a82d385ec2c3
add Thread.schedule() and improve Time.period()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
76 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
|
77 days = days + 1 |
715
a82d385ec2c3
add Thread.schedule() and improve Time.period()
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
78 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
|
79 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
|
80 return cal.getTimeInMillis() |
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
283
diff
changeset
|
81 end |
9a0cc6d9b27b
add Time.period();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
283
diff
changeset
|
82 |
1546
2b4471d310b3
better time zone handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1353
diff
changeset
|
83 function Time.parse( pattern, source, time_zone ) |
1098 | 84 local fmt = SimpleDateFormat.new(pattern) |
1546
2b4471d310b3
better time zone handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1353
diff
changeset
|
85 set_time_zone(fmt,time_zone) |
1098 | 86 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
|
87 end |
503 | 88 |
1079 | 89 |
90 local count_times = { | |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
91 days = Time.period{days=1} |
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
92 hours = Time.period{hours=1} |
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
93 minutes = Time.period{minutes=1} |
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
94 seconds = Time.period{seconds=1} |
1079 | 95 } |
96 | |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
97 function Time.count( time, ... ) |
1079 | 98 local cal = Calendar.getInstance() |
99 cal.setTimeInMillis(time) | |
100 local rtn = {} | |
101 for i, v in ipairs{...} do | |
102 local t = count_times[v] | |
103 t or error("invalid field: "..v) | |
104 rtn[#rtn+1] = floor(time/t) | |
105 time = time%t | |
106 end | |
107 rtn[#rtn+1] = time | |
108 return Table.unpack(rtn) | |
109 end | |
110 | |
111 | |
1088
bae2d0c2576c
change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents:
1084
diff
changeset
|
112 return Time |