in src/com/amazon/ion/Timestamp.java [2144:2215]
private static void print(Appendable out, Timestamp adjusted)
throws IOException
{
// null is our first "guess" to get it out of the way
if (adjusted == null) {
out.append("null.timestamp");
return;
}
// so we have a real value - we'll start with the date portion
// which we always have
print_digits(out, adjusted._year, 4);
if (adjusted._precision == Precision.YEAR) {
assert adjusted._offset == UNKNOWN_OFFSET;
out.append("T");
return;
}
out.append("-");
print_digits(out, adjusted._month, 2); // convert calendar months to a base 1 value
if (adjusted._precision == Precision.MONTH) {
assert adjusted._offset == UNKNOWN_OFFSET;
out.append("T");
return;
}
out.append("-");
print_digits(out, adjusted._day, 2);
if (adjusted._precision == Precision.DAY) {
assert adjusted._offset == UNKNOWN_OFFSET;
// out.append("T");
return;
}
out.append("T");
print_digits(out, adjusted._hour, 2);
out.append(":");
print_digits(out, adjusted._minute, 2);
// ok, so how much time do we have ?
if (adjusted._precision == Precision.SECOND) {
out.append(":");
print_digits(out, adjusted._second, 2);
if (adjusted._fraction != null) {
print_fractional_digits(out, adjusted._fraction);
}
}
if (adjusted._offset != UNKNOWN_OFFSET) {
int min, hour;
min = adjusted._offset;
if (min == 0) {
out.append('Z');
}
else {
if (min < 0) {
min = -min;
out.append('-');
}
else {
out.append('+');
}
hour = min / 60;
min = min - hour*60;
print_digits(out, hour, 2);
out.append(":");
print_digits(out, min, 2);
}
}
else {
out.append("-00:00");
}
}