File tree Expand file tree Collapse file tree 2 files changed +51
-0
lines changed
Expand file tree Collapse file tree 2 files changed +51
-0
lines changed Original file line number Diff line number Diff 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)
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments