]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/datatypes/literal/Date.java
XML Elements are exported in the original order (if order is stored during import)
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / datatypes / literal / Date.java
1 package org.simantics.xml.sax.base.datatypes.literal;\r
2 \r
3 import java.text.ParseException;\r
4 import java.text.SimpleDateFormat;\r
5 import java.util.Calendar;\r
6 import java.util.Locale;\r
7 import java.util.TimeZone;\r
8 \r
9 import org.simantics.databoard.Bindings;\r
10 import org.simantics.databoard.binding.Binding;\r
11 import org.simantics.databoard.util.Bean;\r
12 \r
13 public class Date extends Bean implements org.simantics.xml.sax.base.datatypes.adt.Date {\r
14 \r
15         public static final Binding BINDING = Bindings.getBindingUnchecked(Date.class);\r
16 \r
17         public int year;\r
18         public byte month;\r
19         public byte day;\r
20         public int offset;\r
21         \r
22         public Date(){\r
23                 super(BINDING);\r
24         }\r
25 \r
26         public Date(int year, int month, int day) {\r
27                 this(year,month,day, java.lang.Integer.MIN_VALUE);\r
28         }\r
29         \r
30         public Date(int year, int month, int day, int offset) {\r
31                 super(BINDING);\r
32                 if (month <= 0 || month > 12) throw new IllegalArgumentException("Month must be between 1 - 12, got " + month);\r
33                 if (day <= 0 || day > 31) throw new IllegalArgumentException("Day must be between 1 - 31, got " + day);\r
34                 this.year = year;\r
35                 this.month = (byte)month;\r
36                 this.day = (byte)day;\r
37                 this.offset = offset;\r
38         }\r
39 \r
40         @Override\r
41         public int getYear() {\r
42                 return year;\r
43         }\r
44 \r
45         @Override\r
46         public int getMonth() {\r
47                 return month;\r
48         }\r
49 \r
50         @Override\r
51         public int getDate() {\r
52                 return day;\r
53         }\r
54 \r
55         @Override\r
56         public int getTimezoneOffset() {\r
57                 return offset;\r
58         }\r
59 \r
60         @Override\r
61         public java.util.Date getJavaDate() {\r
62                 Calendar c = Calendar.getInstance();\r
63                 c.set(year, month, day);\r
64                 if (offset != Integer.MIN_VALUE) {\r
65                         c.setTimeZone(TimeZone.getTimeZone(TimeZone.getAvailableIDs(offset*60*1000)[0]));\r
66                 }\r
67                 return c.getTime();\r
68         }\r
69         \r
70         @Override\r
71         public int compare(org.simantics.xml.sax.base.datatypes.adt.Date o) {\r
72                 if (getYear() != o.getYear())\r
73                         return getYear() - o.getYear();\r
74                 if (getMonth() != o.getMonth())\r
75                         return getMonth() - o.getMonth();\r
76                 if (getDate() != o.getDate())\r
77                         return getDate() - o.getDate();\r
78                 return 0;\r
79         }\r
80         \r
81         public static Date parseDate(String dateString) {\r
82                 String[] formats = new String[]{"yyyy-MM-ddXXX", "yyyy-MM-dd"};\r
83                 boolean[] timezone = new boolean[]{true, false};\r
84                 for (int i = 0; i< formats.length; i++) {\r
85                         String format = formats[i];\r
86                         try {\r
87                                 SimpleDateFormat dateFormat = new SimpleDateFormat(format, Locale.ROOT);\r
88                                 java.util.Date n = dateFormat.parse(dateString);\r
89                                 if (timezone[i]) {\r
90                                         return new Date(n.getYear()+1900, n.getMonth()+1, n.getDate(), n.getTimezoneOffset());\r
91                                 }\r
92                                 return new Date(n.getYear()+1900, n.getMonth()+1, n.getDate());\r
93                         }  catch (ParseException e) {\r
94                                 \r
95                         }\r
96                 }\r
97 \r
98                 throw new IllegalArgumentException("Time is not in proper format " + dateString);\r
99                 \r
100         }\r
101         \r
102         @Override\r
103         public String toString() {\r
104                 return year + "-" +(month<10?"0":"")+ month + "-"+(day<10?"0":"")+day;\r
105         }\r
106         \r
107         \r
108 }\r