提交 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 { ...@@ -476,6 +476,44 @@ public class ToChar {
return result[names]; 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. * Emulates Oracle's TO_CHAR(datetime) function.
* *
...@@ -755,15 +793,10 @@ public class ToChar { ...@@ -755,15 +793,10 @@ public class ToChar {
// Time zone // Time zone
} else if (containsAt(format, i, "TZR") != null) { } else if (containsAt(format, i, "TZR") != null) {
TimeZone tz = value instanceof ValueTimestampTimeZone ? output.append(getTimeZone(value, false));
((ValueTimestampTimeZone) value).getTimeZone() : TimeZone.getDefault();
output.append(tz.getID());
i += 3; i += 3;
} else if (containsAt(format, i, "TZD") != null) { } else if (containsAt(format, i, "TZD") != null) {
TimeZone tz = value instanceof ValueTimestampTimeZone ? output.append(getTimeZone(value, true));
((ValueTimestampTimeZone) value).getTimeZone() : TimeZone.getDefault();
boolean daylight = tz.inDaylightTime(new java.util.Date());
output.append(tz.getDisplayName(daylight, TimeZone.SHORT));
i += 3; i += 3;
// Week // Week
......
...@@ -9,13 +9,10 @@ import java.math.BigDecimal; ...@@ -9,13 +9,10 @@ import java.math.BigDecimal;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.SimpleTimeZone;
import java.util.TimeZone;
import org.h2.api.ErrorCode; import org.h2.api.ErrorCode;
import org.h2.api.TimestampWithTimeZone; import org.h2.api.TimestampWithTimeZone;
import org.h2.message.DbException; import org.h2.message.DbException;
import org.h2.util.DateTimeUtils; import org.h2.util.DateTimeUtils;
import org.h2.util.StringUtils;
/** /**
* Implementation of the TIMESTAMP WITH TIME ZONE data type. * Implementation of the TIMESTAMP WITH TIME ZONE data type.
...@@ -149,30 +146,6 @@ public class ValueTimestampTimeZone extends Value { ...@@ -149,30 +146,6 @@ public class ValueTimestampTimeZone extends Value {
return timeZoneOffsetMins; 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 @Override
public Timestamp getTimestamp() { public Timestamp getTimestamp() {
throw new UnsupportedOperationException("unimplemented"); throw new UnsupportedOperationException("unimplemented");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论