001: /*
002: * Jython Database Specification API 2.0
003: *
004: * $Id: JavaDateFactory.java 2414 2005-02-23 04:26:23Z bzimmer $
005: *
006: * Copyright (c) 2003 brian zimmer <bzimmer@ziclix.com>
007: *
008: */
009: package com.ziclix.python.sql;
010:
011: import org.python.core.Py;
012: import org.python.core.PyObject;
013:
014: import java.sql.Time;
015: import java.sql.Timestamp;
016: import java.util.Calendar;
017:
018: /**
019: * Produce java.[util|sql] type dates.
020: *
021: * @author brian zimmer
022: * @author last revised by $Author: bzimmer $
023: * @version $Revision: 2414 $
024: */
025: public class JavaDateFactory implements DateFactory {
026:
027: /**
028: * This function constructs an object holding a date value.
029: *
030: * @param year
031: * @param month
032: * @param day
033: * @return PyObject
034: */
035: public PyObject Date(int year, int month, int day) {
036:
037: Calendar c = Calendar.getInstance();
038:
039: c.set(Calendar.YEAR, year);
040: c.set(Calendar.MONTH, month - 1);
041: c.set(Calendar.DATE, day);
042:
043: return DateFromTicks(c.getTime().getTime() / 1000);
044: }
045:
046: /**
047: * This function constructs an object holding a time value.
048: *
049: * @param hour
050: * @param minute
051: * @param second
052: * @return PyObject
053: */
054: public PyObject Time(int hour, int minute, int second) {
055:
056: Calendar c = Calendar.getInstance();
057:
058: c.set(Calendar.HOUR, hour);
059: c.set(Calendar.MINUTE, minute);
060: c.set(Calendar.SECOND, second);
061:
062: return TimeFromTicks(c.getTime().getTime() / 1000);
063: }
064:
065: /**
066: * This function constructs an object holding a time stamp value.
067: *
068: * @param year
069: * @param month
070: * @param day
071: * @param hour
072: * @param minute
073: * @param second
074: * @return PyObject
075: */
076: public PyObject Timestamp(int year, int month, int day, int hour,
077: int minute, int second) {
078:
079: Calendar c = Calendar.getInstance();
080:
081: c.set(Calendar.YEAR, year);
082: c.set(Calendar.MONTH, month - 1);
083: c.set(Calendar.DATE, day);
084: c.set(Calendar.HOUR, hour);
085: c.set(Calendar.MINUTE, minute);
086: c.set(Calendar.SECOND, second);
087: c.set(Calendar.MILLISECOND, 0);
088:
089: return TimestampFromTicks(c.getTime().getTime() / 1000);
090: }
091:
092: /**
093: * This function constructs an object holding a date value from the
094: * given ticks value (number of seconds since the epoch; see the
095: * documentation of the standard Python <i>time</i> module for details).
096: * <p/>
097: * <i>Note:</i> The DB API 2.0 spec calls for time in seconds since the epoch
098: * while the Java Date object returns time in milliseconds since the epoch.
099: * This module adheres to the python API and will therefore use time in
100: * seconds rather than milliseconds, so adjust any Java code accordingly.
101: *
102: * @param ticks number of seconds since the epoch
103: * @return PyObject
104: */
105: public PyObject DateFromTicks(long ticks) {
106:
107: Calendar c = Calendar.getInstance();
108:
109: c.setTime(new java.util.Date(ticks * 1000));
110: c.set(Calendar.HOUR, 0);
111: c.set(Calendar.MINUTE, 0);
112: c.set(Calendar.SECOND, 0);
113: c.set(Calendar.MILLISECOND, 0);
114:
115: return Py.java2py(new java.sql.Date(c.getTime().getTime()));
116: }
117:
118: /**
119: * This function constructs an object holding a time value from the
120: * given ticks value (number of seconds since the epoch; see the
121: * documentation of the standard Python <i>time</i> module for details).
122: * <p/>
123: * <i>Note:</i> The DB API 2.0 spec calls for time in seconds since the epoch
124: * while the Java Date object returns time in milliseconds since the epoch.
125: * This module adheres to the python API and will therefore use time in
126: * seconds rather than milliseconds, so adjust any Java code accordingly.
127: *
128: * @param ticks number of seconds since the epoch
129: * @return PyObject
130: */
131: public PyObject TimeFromTicks(long ticks) {
132: return Py.java2py(new Time(ticks * 1000));
133: }
134:
135: /**
136: * This function constructs an object holding a time stamp value from
137: * the given ticks value (number of seconds since the epoch; see the
138: * documentation of the standard Python <i>time</i> module for details).
139: * <p/>
140: * <i>Note:</i> The DB API 2.0 spec calls for time in seconds since the epoch
141: * while the Java Date object returns time in milliseconds since the epoch.
142: * This module adheres to the python API and will therefore use time in
143: * seconds rather than milliseconds, so adjust any Java code accordingly.
144: *
145: * @param ticks number of seconds since the epoch
146: * @return PyObject
147: */
148: public PyObject TimestampFromTicks(long ticks) {
149: return Py.java2py(new Timestamp(ticks * 1000));
150: }
151: }
|