在编写Web应用程序时,将 所有 日期时间(服务器端)存储在数据库中作为UTC时间戳是有意义的。
当我发现您无法在JavaScript中对时区进行操作方面自然无法做到这一点时,我感到非常惊讶。
我稍微扩展了Date对象。这个功能有意义吗?基本上,每次我向服务器发送任何内容时,都会使用该功能格式化时间戳记。
您在这里看到任何重大问题吗?还是从另一个角度解决问题?
Date.prototype.getUTCTime = function(){
return new Date(
this.getUTCFullYear(),
this.getUTCMonth(),
this.getUTCDate(),
this.getUTCHours(),
this.getUTCMinutes(),
this.getUTCSeconds()
).getTime();
}
在我看来,这有点令人费解。而且我也不确定性能。
以这种方式构造的日期使用本地时区,从而使构造的日期不正确。设置某个日期对象的时区是从包含时区的日期字符串中构造它。(我无法在较旧的Android浏览器中正常运行。)
请注意,getTime()
返回毫秒,而不是普通秒。
对于UTC / Unix时间戳,以下内容就足够了:
Math.floor((new Date()).getTime() / 1000)
它将当前时区偏移量计入结果。对于字符串表示形式,DavidEllis的答案有效。
澄清:
new Date(Y, M, D, h, m, s)
该输入被视为本地时间。如果传递了UTC时间,结果将有所不同。观察(我现在是格林尼治标准时间+02:00,现在是07:50):
> var d1 = new Date();
> d1.toUTCString();
"Sun, 18 Mar 2012 05:50:34 GMT" // two hours less than my local time
> Math.floor(d1.getTime()/ 1000)
1332049834
> var d2 = new Date( d1.getUTCFullYear(), d1.getUTCMonth(), d1.getUTCDate(), d1.getUTCHours(), d1.getUTCMinutes(), d1.getUTCSeconds() );
> d2.toUTCString();
"Sun, 18 Mar 2012 03:50:34 GMT" // four hours less than my local time, and two hours less than the original time - because my GMT+2 input was interpreted as GMT+0!
> Math.floor(d2.getTime()/ 1000)
1332042634
另请注意,getUTCDate()
不能代替getUTCDay()
。这是因为getUTCDate()
返回月份中的某天;相反,getUTCDay()
返回星期几 。
我选择“无时区”是因为我知道我的应用程序使用的所有时间戳总是UTC。就我得到的文档而言,“with timestamp”的唯一区别是,我可以提供其他时区的值,然后将其转换为UTC。然而,我想避免这样的自动转换,因为如果我知道我的值是UTC,它们几乎没有任何好处。 当我在测试表中添加新记录并使用pgAdmin查看表的内容时,我可以看到插入日期已正确地保存为UTC格式。 但是,当我尝试使用JDBC选择
问题内容: 我想获取UTC的当前时间。我到目前为止所做的是(仅出于测试目的): 是我的当地时间,那很好 是我的本地时间+ 1,但应该是本地时间-1 … 我的本地时区是UTC + 1(根据调试输出和此处的列表:https : //www.joda.org/joda- time/timezones.html )… 如何正确地从一个时区转换为另一个时区(包括毫秒表示)? 编辑 我需要日期/毫秒…这不是正
问题内容: 我想获取UTC时区的时间。所以我写了代码: 问题是输出显示了我的PST时间(我的本地时区)。我需要它来输出UTC时间,以便将其存储在数据库中。 问题答案:
我想要得到UTC时区的时间。所以我写了代码: 问题是输出显示了PST(我的本地时区)中的时间。我需要它以UTC的形式输出时间,这样我就可以把它存储在我的数据库中。
问题内容: 我想得到 1到24 ,太平洋时间凌晨1点。 如何在Node.JS中获得该号码? 我想知道现在太平洋时间现在几点。 问题答案: 您应该检出Date对象。 特别是,您可以查看Date对象的getHours()方法。 getHours()返回0到23之间的时间,因此请确保相应地进行处理。我认为0-23有点直观,因为军事时间是从0-23开始,但这取决于您。 考虑到这一点,代码将类似于以下内容:
问题内容: 获取当前UTC时间的功能是什么。我已经尝试使用System.getCurrentTime,但是我得到了设备的当前日期和时间。 谢谢 问题答案: 确实会提供自1970年1月1日UTC以来的毫秒数。您看到本地时间的原因可能是因为您在使用实例之前将其转换为字符串。您可以使用s 在任何时区将s 转换为s: 另请参阅此相关问题。