1 package org.simantics.xml.sax.base.datatypes.literal;
\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
9 import org.simantics.databoard.Bindings;
\r
10 import org.simantics.databoard.binding.Binding;
\r
11 import org.simantics.databoard.util.Bean;
\r
13 public class Date extends Bean implements org.simantics.xml.sax.base.datatypes.adt.Date {
\r
15 public static final Binding BINDING = Bindings.getBindingUnchecked(Date.class);
\r
26 public Date(int year, int month, int day) {
\r
27 this(year,month,day, java.lang.Integer.MIN_VALUE);
\r
30 public Date(int year, int month, int day, int offset) {
\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
35 this.month = (byte)month;
\r
36 this.day = (byte)day;
\r
37 this.offset = offset;
\r
41 public int getYear() {
\r
46 public int getMonth() {
\r
51 public int getDate() {
\r
56 public int getTimezoneOffset() {
\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
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
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
87 SimpleDateFormat dateFormat = new SimpleDateFormat(format, Locale.ROOT);
\r
88 java.util.Date n = dateFormat.parse(dateString);
\r
90 return new Date(n.getYear()+1900, n.getMonth()+1, n.getDate(), n.getTimezoneOffset());
\r
92 return new Date(n.getYear()+1900, n.getMonth()+1, n.getDate());
\r
93 } catch (ParseException e) {
\r
98 throw new IllegalArgumentException("Time is not in proper format " + dateString);
\r
103 public String toString() {
\r
104 return year + "-" +(month<10?"0":"")+ month + "-"+(day<10?"0":"")+day;
\r