我有一个来自我的应用程序的Timestamp值.用户可以在任何给定的本地TimeZone中.
由于此日期用于假定给定时间始终为GMT的WebService,因此我需要将用户的参数从say(EST)转换为(GMT).这是踢球者:用户不知道他的TZ.他进入了他想要发送给WS的创建日期,所以我需要的是:
用户输入: 2008年5月1日下午6:12(美国东部时间)
WS的参数必须是:2008年5月1日下午6:12(格林威治标准时间)
我知道默认情况下TimeStamps总是应该是GMT,但是在发送参数时,即使我从TS创建我的日历(应该是GMT),除非用户使用GMT,否则小时总是关闭.我错过了什么?
Timestamp issuedDate = (Timestamp) getACPValue(inputs_, "issuedDate");
Calendar issueDate = convertTimestampToJavaCalendar(issuedDate);
...
private static java.util.Calendar convertTimestampToJavaCalendar(Timestamp ts_) {
java.util.Calendar cal = java.util.Calendar.getInstance(
GMT_TIMEZONE, EN_US_LOCALE);
cal.setTimeInMillis(ts_.getTime());
return cal;
}
Run Code Online (Sandbox Code Playgroud)
使用前面的代码,这就是我得到的结果(简单格式,便于阅读):
[2008年5月1日下午11:12]
我必须在UTC中存储UTC dateTime.
我已将特定时区中给出的dateTime转换为UTC.因为我遵循以下代码.
我的输入日期时间是"20121225 10:00:00 Z"时区是"亚洲/加尔各答"
我的服务器/数据库(oracle)在同一时区(IST)"亚洲/加尔各答"运行
获取此特定时区中的Date对象
String date = "20121225 10:00:00 Z";
String timeZoneId = "Asia/Calcutta";
TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);
DateFormat dateFormatLocal = new SimpleDateFormat("yyyyMMdd HH:mm:ss z");
//This date object is given time and given timezone
java.util.Date parsedDate = dateFormatLocal.parse(date + " "
+ timeZone.getDisplayName(false, TimeZone.SHORT));
if (timeZone.inDaylightTime(parsedDate)) {
// We need to re-parse because we don't know if the date
// is DST until it is parsed...
parsedDate = dateFormatLocal.parse(date + " "
+ timeZone.getDisplayName(true, TimeZone.SHORT));
} …Run Code Online (Sandbox Code Playgroud) 我已经四处寻找,但令人惊讶的是无法为Oracle JDBC找到答案.这个密切相关的问题有PostgreSQL和MySQL的答案.
基本上,如果我在两个不同时区有两个应用服务器将时间戳写入一个Oracle数据库,会发生什么?谢谢.
编辑:我应该补充一点,当我查询时,JDBC似乎是发送到数据库的值是在我的本地时区.