提交 35bda43c authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Move getTimeZone() to ToChar and change return values to suitable for this class

上级 c901b9cd
......@@ -476,6 +476,44 @@ public class ToChar {
return result[names];
}
/**
* Returns time zone display name or ID for the specified date-time value.
*
* @param value
* value
* @param tzd
* if {@code true} return TZD (time zone region with Daylight Saving
* Time information included), if {@code false} return TZR (time zone
* region)
* @return time zone display name or ID
*/
private static String getTimeZone(Value value, boolean tzd) {
if (!(value instanceof ValueTimestampTimeZone)) {
TimeZone tz = TimeZone.getDefault();
if (tzd) {
boolean daylight = tz.inDaylightTime(new java.util.Date());
return tz.getDisplayName(daylight, TimeZone.SHORT);
}
return tz.getID();
}
int offset = ((ValueTimestampTimeZone) value).getTimeZoneOffsetMins();
if (offset == 0) {
return "UTC";
}
StringBuilder b = new StringBuilder(9);
b.append("GMT");
if (offset < 0) {
b.append('-');
offset = - offset;
} else {
b.append('+');
}
StringUtils.appendZeroPadded(b, 2, offset / 60);
b.append(':');
StringUtils.appendZeroPadded(b, 2, offset % 60);
return b.toString();
}
/**
* Emulates Oracle's TO_CHAR(datetime) function.
*
......@@ -755,15 +793,10 @@ public class ToChar {
// Time zone
} else if (containsAt(format, i, "TZR") != null) {
TimeZone tz = value instanceof ValueTimestampTimeZone ?
((ValueTimestampTimeZone) value).getTimeZone() : TimeZone.getDefault();
output.append(tz.getID());
output.append(getTimeZone(value, false));
i += 3;
} else if (containsAt(format, i, "TZD") != null) {
TimeZone tz = value instanceof ValueTimestampTimeZone ?
((ValueTimestampTimeZone) value).getTimeZone() : TimeZone.getDefault();
boolean daylight = tz.inDaylightTime(new java.util.Date());
output.append(tz.getDisplayName(daylight, TimeZone.SHORT));
output.append(getTimeZone(value, true));
i += 3;
// Week
......
......@@ -9,13 +9,10 @@ import java.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.SimpleTimeZone;
import java.util.TimeZone;
import org.h2.api.ErrorCode;
import org.h2.api.TimestampWithTimeZone;
import org.h2.message.DbException;
import org.h2.util.DateTimeUtils;
import org.h2.util.StringUtils;
/**
* Implementation of the TIMESTAMP WITH TIME ZONE data type.
......@@ -149,30 +146,6 @@ public class ValueTimestampTimeZone extends Value {
return timeZoneOffsetMins;
}
/**
* Returns compatible offset-based time zone with no DST schedule.
*
* @return compatible offset-based time zone
*/
public TimeZone getTimeZone() {
int offset = timeZoneOffsetMins;
if (offset == 0) {
return DateTimeUtils.UTC;
}
StringBuilder b = new StringBuilder(9);
b.append("GMT");
if (offset < 0) {
b.append('-');
offset = - offset;
} else {
b.append('+');
}
StringUtils.appendZeroPadded(b, 2, offset / 60);
b.append(':');
StringUtils.appendZeroPadded(b, 2, offset % 60);
return new SimpleTimeZone(offset * 60000, b.toString());
}
@Override
public Timestamp getTimestamp() {
throw new UnsupportedOperationException("unimplemented");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论