我有一个数据库OleDateTime,以GMT时区格式存储日期.我已经实现了一个类,Date在java中扩展以表示经典日期格式.但我的班级依赖于语言环境(我在GMT + 2).因此,它将db中的日期转换为date - 2 hours.如何正确转换日期?我希望我的班级与语言环境无关,总是使用GMT时区.实际上,问题是:
class MyOleDateTime extends Date {
static {
Locale.setDefault(WhatGoesHere?)
}
// ... some constructors
// ... some methods
}
Run Code Online (Sandbox Code Playgroud) 我的问题可能微不足道,但我只是在寻求澄清.我在SO中读到Java的Date()实际上总是在UTC时间,为什么当我创建一个Date()对象并使用toString()打印它时,它会显示本地时间.如果这不是打印它的正确方法,它应该是什么,所以我会得到UTC时间?
struct stat中的一个字段是st_mtime.我认为这是自1970年1月1日以来的秒数.那是GMT还是当地时间?
无论当前数据库所在的时区如何,我都试图获取当前的GMT/UTC.我找到的可能解决方案是:
SELECT SYSTIMESTAMP AT TIME ZONE dbtimezone FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
它给了我目前的格林威治标准时间,但如果这是正确的方式,我不是100%自信.有人请帮助提供获得当前GMT的最佳方式吗?谢谢.
Windows要求用户从大约200个时区中进行选择,而实际上只有25个GMT偏移量.(见下文)
我可以要求我的应用中的用户单独选择这些用户吗?具有相同GMT偏移的时区之间有什么区别吗?(例如:山地标准时间与墨西哥标准时间2)
-12.0,GMT -12:00,Eniwetok, Kwajalein
-11.0,GMT -11:00,Midway Island, Samoa
-10.0,GMT -10:00,Hawaii
-9.0,GMT -9:00,Alaska
-8.0,GMT -8:00,Pacific Time, US & Canada
-7.0,GMT -7:00,Mountain Time, US & Canada
-6.0,GMT -6:00,Central Time, US & Canada, Mexico City
-5.0,GMT -5:00,Eastern Time, US & Canada, Bogota, Lima
-4.0,GMT -4:00,Atlantic Time, Canada, Caracas, La Paz
-3.5,GMT -3:30,Newfoundland
-3.0,GMT -3:00,Brazil, Buenos Aires, Georgetown
-2.0,GMT -2:00,Mid-Atlantic
-1.0,GMT -1:00 hour,Azores, Cape Verde Islands
0.0,GMT,Western Europe Time, London, Lisbon, Casablanca
1.0,GMT +1:00 hour,Brussels, Copenhagen, Madrid, …Run Code Online (Sandbox Code Playgroud) 我正在编写一些将在多个互通系统上运行的代码.我使用time()来获取time_t,但这导致了系统之间时区差异的问题,所以我想在GMT中得到time_t.我一直在查看time.h函数,但我不清楚如何确定我能得到正确的时间.这是我到目前为止所提出的:
time_t t = time();
struct tm *gtm = gmtime(&t);
time_t gt = mktime(gtm);
Run Code Online (Sandbox Code Playgroud)
现在,这似乎在我的机器上得到了正确的答案,但我想知道它是否会在推出之前普遍适用,即使其他机器的时钟设置为当地时间或GMT或不同的时区或任何其他.我担心的原因是因为mktime.在描述中,它表示它将tm结构解释为"以本地时间表示的日历时间".听起来我觉得它不会返回GMT时间,虽然它似乎在我的机器上.此外,当我打印出gt时,它比t早4个小时,这似乎是正确的.但如果我运行以下内容:
time_t t = time();
struct tm *gtm = gmtime(&t);
struct tm *ltm = localtime(&t);
printf("%d, %d\n", gtm->tm_hour, ltm->tm_hour);
Run Code Online (Sandbox Code Playgroud)
时间是相同的,是当地时间,这不是我的预期.
为了记录,在另一个答案中,我看到了timegm()的引用,听起来很完美,但它在我的系统中不存在.
那么简而言之,如何在C中的任何Windows机器上获得GMT中的time_t?
编辑:删除已添加的msvcrt标记,因为我没有使用msvcrt.
在 PHP 中,date('I')将告诉我夏令时是否有效。这是否告诉我 DST 是否专门针对我的服务器配置的时区有效,或者是否在有效期间?
我在亚利桑那州,那里不遵守夏令时。因此,我需要我的服务器认识到纽约现在比我早 2 小时,但当明年 3 月夏令时开始时,它比我早 3 小时。
更新:
鉴于它适用于我的服务器配置的时区的评论,在知道该值全年变化的情况下,我将如何确定我的服务器时区和某个任意时区之间的当前时差?
我在转换timestamp为GMT. 据我所知,它timestamp总是及时的GMT,所以我期望datetime.fromtimestamp返回GMT或时区感知的日期时间,但它返回我的本地(布拉迪斯拉发/布拉格)日期时间。
import datetime
datetime.datetime.fromtimestamp(1566720000)
datetime.datetime(2019, 8, 25, 10, 0)
Run Code Online (Sandbox Code Playgroud)
但根据纪元转换器,它是
GMT:2019 年 8 月 25 日星期日上午 8:00:00
编辑:datetime.datetime.fromtimestamp(1566720000).tzinfo不返回任何内容,因此它不知道 tz 。
你知道问题出在哪里吗?
我目前正在尝试解析从每隔几分钟从Web下载的xml获取的字符串.字符串看起来像这样:
Thu Jul 12 08:39:56 GMT+0100 2012
Run Code Online (Sandbox Code Playgroud)
起初我只是做了一个string.split并在时间(GMT+0100 2012)后取出所有内容并在日期之后插入2012.
这很有效,直到日期变为:
Thu Jul 12 08:39:56 GMT+0000 2012
Run Code Online (Sandbox Code Playgroud)
因此,我想动态地传递GMT +,因为他们在c#中将该字符串发送给我.
任何意见,将不胜感激.
我得到的格式yyyy-MM-dd'T'HH:mm:ss.SSS'Z'。但是,这不适用于我的代码
datetime.utcnow().strftime("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
Run Code Online (Sandbox Code Playgroud)
输出很简单:
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
为什么这不起作用?什么是修复?