package org.basex.query.item; import static org.basex.query.QueryText.*; import java.text.SimpleDateFormat; import org.basex.query.QueryException; import org.basex.query.expr.Expr; import org.basex.util.InputInfo; import org.basex.util.Token; /** * DateTime item. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public final class Dtm extends Date { /** Date format. */ private static final SimpleDateFormat DATE = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.S"); /** * Constructor. * @param d date */ public Dtm(final Date d) { super(AtomType.DTM, d); if(xc.getHour() == UNDEF) { xc.setHour(0); xc.setMinute(0); xc.setSecond(0); } } /** * Constructor. * @param dt date * @param ii input info * @throws QueryException query exception */ public Dtm(final byte[] dt, final InputInfo ii) throws QueryException { super(AtomType.DTM, dt, XDTM, ii); final int i = Token.indexOf(dt, 'T'); if(i == -1) dateErr(dt, XDTM, ii); date(Token.substring(dt, 0, i), XDTM, ii); time(Token.substring(dt, i + 1), XDTM, ii); } /** * Constructor. * @param tm time in milliseconds * @param ii input info * @throws QueryException query exception */ Dtm(final Int tm, final InputInfo ii) throws QueryException { this(Token.token(DATE.format(new java.util.Date(tm.itr(ii)))), ii); } /** * Constructor. * @param tm milliseconds since January 1, 1970, 00:00:00 GMT * @param ii input info * @throws QueryException query exception */ public Dtm(final long tm, final InputInfo ii) throws QueryException { this(Token.token(DATE.format(new java.util.Date(tm))), ii); } /** * Constructor. * @param d date * @param a duration * @param p plus/minus flag * @param ii input info * @throws QueryException query exception */ public Dtm(final Date d, final Dur a, final boolean p, final InputInfo ii) throws QueryException { this(d); calc(a, p, ii); } @Override public boolean sameAs(final Expr cmp) { if(!(cmp instanceof Dtm)) return false; final Dtm dtm = (Dtm) cmp; return type == dtm.type && xc.equals(dtm.xc); } }