Annotate

util/datetime.lua @ 3436:9c454c029c26

s2smanager: Remove dependency on eventmanager
author Matthew Wild <mwild1@gmail.com>
date Tue, 03 Aug 2010 10:57:27 +0100
parent 3430:970690b3cb28
child 3642:ed80c4c56b9c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 921
diff changeset
1 -- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 248
diff changeset
4 --
758
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
6 -- COPYING file in the source package for more information.
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 248
diff changeset
7 --
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 248
diff changeset
8
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 248
diff changeset
9
921
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
10 -- XEP-0082: XMPP Date and Time Profiles
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
11
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
12 local os_date = os.date;
3430
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
13 local os_time = os.time;
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
14 local os_difftime = os.difftime;
921
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
15 local error = error;
3430
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
16 local tonumber = tonumber;
921
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
17
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
18 module "datetime"
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
19
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
20 function date(t)
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
21 return os_date("!%Y-%m-%d", t);
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
22 end
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
23
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
24 function datetime(t)
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
25 return os_date("!%Y-%m-%dT%H:%M:%SZ", t);
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
26 end
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
27
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
28 function time(t)
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
29 return os_date("!%H:%M:%S", t);
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
30 end
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
31
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
32 function legacy(t)
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
33 return os_date("!%Y%m%dT%H:%M:%S", t);
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
34 end
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
35
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
36 function parse(s)
3430
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
37 if s then
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
38 local year, month, day, hour, min, sec, tzd;
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
39 year, month, day, hour, min, sec, tzd = s:match("^(%d%d%d%d)-?(%d%d)-?(%d%d)T(%d%d):(%d%d):(%d%d)%.?%d*([Z+%-].*)$");
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
40 if year then
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
41 local time_offset = os_difftime(os_time(os_date("*t")), os_time(os_date("!*t"))); -- to deal with local timezone
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
42 local tzd_offset = 0;
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
43 if tzd ~= "" and tzd ~= "Z" then
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
44 local sign, h, m = tzd:match("([+%-])(%d%d):(%d%d)");
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
45 if not sign then return; end
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
46 h, m = tonumber(h), tonumber(m);
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
47 tzd_offset = h * 60 * 60 + m * 60;
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
48 if sign == "-" then tzd_offset = -tzd_offset; end
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
49 end
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
50 sec = sec + time_offset + tzd_offset;
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
51 return os_time({year=year, month=month, day=day, hour=hour, min=min, sec=sec});
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
52 end
970690b3cb28 util.datetime: Added implementation for function parse().
Waqas Hussain <waqas20@gmail.com>
parents: 2923
diff changeset
53 end
921
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
54 end
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
55
f97d37a7d8a6 util.datetime: Allow specifying a time to format
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
56 return _M;