Skip to content

Commit 6cb9fdc

Browse files
committed
Add Date,DateTime,Time parsers
1 parent 1c71c19 commit 6cb9fdc

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

extra/classes/classes.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,7 @@ const (
1111
DateStr = ":extra:DateStr"
1212
DateTimeStr = ":extra:DateTimeStr"
1313
TimeStr = ":extra:TimeStr"
14+
Date = ":extra:Date"
15+
DateTime = ":extra:DateTime"
16+
Time = ":extra:Time"
1417
)

extra/transformers.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package extra
2+
3+
import (
4+
"time"
5+
6+
. "github.com/shellyln/takenoco/base"
7+
clsz "github.com/shellyln/takenoco/extra/classes"
8+
)
9+
10+
func ParseDate(ctx ParserContext, asts AstSlice) (AstSlice, error) {
11+
value := asts[len(asts)-1].Value.(string)
12+
t, err := time.Parse("2006-01-02", value)
13+
if err != nil {
14+
return nil, err
15+
}
16+
return AstSlice{{
17+
ClassName: clsz.Date,
18+
Type: AstType_Any,
19+
Value: t.UTC(),
20+
}}, nil
21+
}
22+
23+
func ParseDateTime(ctx ParserContext, asts AstSlice) (AstSlice, error) {
24+
// TODO: BUG: Cannot parse years with negative values or years greater than or equal to 10000.
25+
value := asts[len(asts)-1].Value.(string)
26+
t, err := time.Parse("2006-01-02T15:04:05.000000000-07:00", value)
27+
if err != nil {
28+
return nil, err
29+
}
30+
return AstSlice{{
31+
ClassName: clsz.DateTime,
32+
Type: AstType_Any,
33+
Value: t.UTC(),
34+
}}, nil
35+
}
36+
37+
func ParseTime(ctx ParserContext, asts AstSlice) (AstSlice, error) {
38+
value := "1970-01-01T" + asts[len(asts)-1].Value.(string) + "+00:00"
39+
t, err := time.Parse("2006-01-02T15:04:05.000000000-07:00", value)
40+
if err != nil {
41+
return nil, err
42+
}
43+
return AstSlice{{
44+
ClassName: clsz.Time,
45+
Type: AstType_Any,
46+
Value: t.UTC(),
47+
}}, nil
48+
}

0 commit comments

Comments
 (0)