如何配置JPA/Hibernate将数据库中的日期/时间存储为UTC(GMT)时区?考虑这个带注释的JPA实体:
public class Event {
@Id
public int id;
@Temporal(TemporalType.TIMESTAMP)
public java.util.Date date;
}
Run Code Online (Sandbox Code Playgroud)
如果日期是太平洋标准时间(PST)的2008年2月3日上午9:30,那么我希望将数据库中存储的2008年2月3日下午5:30的UTC时间.同样,当从数据库中检索日期时,我希望它被解释为UTC.所以在这种情况下530pm是在UTC时间下午5点.当它显示时,它将被格式化为太平洋标准时间上午9:30.
使用php处理日期/时间时我很困惑.
我想要做的是:当用户访问我的页面时,我会询问他的时区,然后在他的时区显示"星期几".
我不想使用浏览器的一天.我想在php中进行这个计算.
这就是我试图实现它的方式:
但我不知道如何继续......我将如何在这个时区获得"星期几".
我正在从java应用程序访问Oracle数据库,当我运行我的应用程序时,我收到以下错误:
java.sql.SQLException:ORA-00604:递归SQL级别1发生错误ORA-01882:找不到时区区域
我正在寻找更好地理解以下用户故事:
约翰在西德尼工作.早上9点,他在一个在苏黎世服务器上运行的网络应用程序中记录一个事件.第二天,他前往纽约参加紧急会议,讨论该活动.在会议期间,他按日期和时间搜索活动.
在我看来,这里至少有两个问题:
当约翰搜索事件时,他会知道它发生在9点,但他应该在网络浏览器中输入什么?当他只是输入"9:00"作为时间戳时他不会找到任何东西,因为那可能是苏黎世或纽约时间(因为事件尚未找到,应用程序无法知道它发生在Sidney,所以它无法自动选择正确的时区).
询问用户可能包含时区的时间戳的好方法是什么?
第二个问题是如何显示结果.如果来自全球各地的团队需要讨论该事件(并找到相关事件,请考虑一次针对全球多个站点的破解者攻击).
显示可能在不同时区创建的时间戳的好例子是什么?
注意:请专注于要求的可用性.我可以自己弄清楚数据库映射.目前,我不确定工作流程.它应该以非侵入性/直观的方式询问/提供必要的信息.如果可以,请提供已解决此问题的现有Web应用程序的链接.
我有一个来自我的应用程序的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]
我在Rails 3中转换UTC Time或TimeWithZone本地时间时遇到问题.
Say moment是TimeUTC中的一些变量(例如moment = Time.now.utc).如何转换moment到我的时区,照顾DST(即使用EST/EDT)?
更确切地说,如果时间对应于美国东部夏令时间上午9点和"3月7日上午9点",如果时间是美国东部时间上周一上午9点,我打算打印出"3月14日星期一上午9点".
希望还有另一种方式吗?
编辑:我首先认为 "EDT"应该是一个公认的时区,但"EDT"不是一个实际的时区,更像是时区的状态.例如,要求没有任何意义Time.utc(2011,1,1).in_time_zone("EDT").这有点令人困惑,因为"EST" 是一个实际的时区,在一些不使用夏令时的地方使用,并且是(UTC-5)一年.
我想Date通过javascript 转换日期字符串,使用此代码:
var date = new Date('2013-02-27T17:00:00');
alert(date);
Run Code Online (Sandbox Code Playgroud)
'2013-02-27T17:00:00' 是来自服务器的JSON对象的UTC时间.
但上述代码的结果在Firefox和Chrome之间有所不同:
Firefox返回:
Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time)
Run Code Online (Sandbox Code Playgroud)
Chrome返回:
Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time)
Run Code Online (Sandbox Code Playgroud)
这是不同的1天,我期望的正确结果是Chrome的结果.
演示代码:http://jsfiddle.net/xHtqa/2/
如何解决这个问题以从两者中获得相同的结果?
目标:找到local time并UTC time offset以下列格式构建URL.
示例URL:/ Actions/Sleep?duration = 2002-10-10T12:00:00-05:00
格式基于W3C建议:http: //www.w3.org/TR/xmlschema11-2/#dateTime
文件说:
例如,2002-10-10T12:00:00-05:00(2002年10月10日中午,中央夏令时以及美国东部标准时间)等于2002-10-10T17:00:00Z,比2002-10-10T12:00:00Z晚5个小时.
所以基于我的理解,我需要通过新的Date()找到我的本地时间,然后使用getTimezoneOffset()函数来计算差异,然后将它附加到字符串的末尾.
1.以格式获取当地时间
var local = new Date().format("yyyy-MM-ddThh:mm:ss"); //today (local time)
Run Code Online (Sandbox Code Playgroud)
产量
2013-07-02T09:00:00
Run Code Online (Sandbox Code Playgroud)
2.以小时为单位获取UTC时间偏移量
var offset = local.getTimezoneOffset() / 60;
Run Code Online (Sandbox Code Playgroud)
产量
7
Run Code Online (Sandbox Code Playgroud)
3.Construct URL(仅限时间部分)
var duration = local + "-" + offset + ":00";
Run Code Online (Sandbox Code Playgroud)
输出:
2013-07-02T09:00:00-7:00
Run Code Online (Sandbox Code Playgroud)
以上输出结果表示我的当地时间是2013/07/02 9am,与UTC的差异是7小时(UTC是比当地时间早7小时)
到目前为止它似乎工作,但如果getTimezoneOffset()返回负值如-120怎么办?
我想知道在这种情况下格式应该是什么样的,因为我无法从W3C文档中找到答案.提前致谢.
无论机器上设置的时区如何,我都需要强制任何与GMT/UTC相关的操作.在代码中有任何方便的方法吗?
为了澄清,我正在使用数据库服务器时间进行所有操作,但它是根据本地时区格式化的.
谢谢!
当用户在我们的应用程序中注册时,我们可以在我们针对国家数据库验证邮政编码时推断他们的邮政编码.从这个邮政编码确定他们的时区的潜在猜测的最佳方法是什么?
我们正在努力减少我们明确要求他们提供的数据量.如果我们的最佳猜测是错误的,他们将能够稍后手动设置时区.我发现邮政编码无助于搞清楚美国以外的时区,但在这种情况下我们不得不手动询问,而且无论如何我们主要与美国打交道.
我发现了很多邮政编码数据库,到目前为止只有少数包含时区信息,但那些不是免费的,比如这个.如果为了做到这一点而必须支付订阅服务,那么它就不值得了,我们只需要明确询问用户.
虽然语言不是特别相关,因为我可以转换所需的东西,但我们使用的是PHP和MySQL.