blob: 7f687eafd3612e7a3f0a14bce7a1ff125fefe266 [file] [log] [blame]
package edu.uci.ics.asterix.dataflow.data.nontagged.printers;
import java.io.IOException;
import java.io.PrintStream;
import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
import edu.uci.ics.hyracks.algebricks.data.IPrinter;
import edu.uci.ics.hyracks.algebricks.data.utils.WriteValueTools;
public class ATimePrinter implements IPrinter {
private static final long serialVersionUID = 1L;
public static final ATimePrinter INSTANCE = new ATimePrinter();
@Override
public void init() {
}
@Override
public void print(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
int time = AInt32SerializerDeserializer.getInt(b, s + 1);
ps.print("time(\"");
int timezone = time >> 24;
time -= (timezone << 24);
printTime(time, timezone, ps);
ps.print("\")");
}
final static void printTime(int time, int timezone, PrintStream ps) throws AlgebricksException {
int msec = time * 20 % 1000;
int sec = time * 20 % 60000 / 1000;
int min = time * 20 % 3600000 / 60000;
int hour = time * 20 % 216000000 / 3600000;
try {
if (hour < 10) {
ps.print("0");
}
WriteValueTools.writeInt(hour, ps);
ps.print(":");
if (min < 10) {
ps.print("0");
}
WriteValueTools.writeInt(min, ps);
ps.print(":");
if (sec < 10) {
ps.print("0");
}
WriteValueTools.writeInt(sec, ps);
ps.print(":");
if (msec < 100) {
ps.print("0");
}
if (msec < 10) {
ps.print("0");
}
WriteValueTools.writeInt(msec, ps);
ps.print(timezone >= 0 ? "+" : "-");
int t1 = Math.abs(timezone / 4);
if (t1 < 10) {
ps.print("0");
}
WriteValueTools.writeInt(t1, ps);
ps.print(":");
int t2 = timezone % 4 * ((timezone >= 0) ? 15 : -15);
if (t2 < 10) {
ps.print("0");
}
WriteValueTools.writeInt(t2, ps);
} catch (IOException e) {
throw new AlgebricksException(e);
}
}
}