标签: timezone-offset

在 Postgresql 中,如何使用“在时区”取消反转时区偏移

我正在尝试围绕 Postgresql 时区进行思考,但我似乎无法弄清楚这一点。EST 是美国的“东部标准时间”,通常是UTC-5

示例 1:基础测试

select '08/31/2011 12:00 pm EST'::timestamptz  at time zone 'EST';
      timezone       
---------------------
 2011-08-31 12:00:00
Run Code Online (Sandbox Code Playgroud)

示例 2:偏移量为 +5

select '08/31/2011 12:00 pm EST' at time zone '+5';
      timezone       
---------------------
 2011-08-31 12:00:00
Run Code Online (Sandbox Code Playgroud)

示例 3:偏移量为 -5

 select '08/31/2011 12:00 pm EST' at time zone '-5';
      timezone       
---------------------
 2011-08-31 22:00:00
Run Code Online (Sandbox Code Playgroud)

显然,一切都在倒退。EST 再次......应该是 UTC-5。现在,我确实搜索了文档,它确实解释了事物是“POSIX”,这是向后的。(正偏移位于格林威治标准时间以西,而负偏移位于格林威治标准时间以东)。

但是,我该如何解决这个问题?在应用程序层,我总是可以将 + 号反转为 - 号,但这对我来说似乎有点麻烦 IMO。因此,我的终极问题。

在数据库层(Postgres),有没有办法使用“At Time Zone”语法让 GMT-5 对应于 EST?或者我只需要在应用程序层反转所有内容?

postgresql timezone timezone-offset

5
推荐指数
1
解决办法
1486
查看次数

使用datetime.strftime在时区偏移中显示:字符

给出的格式字符串是什么strftime,可以提供与我看到的相同的输出isoformat(' ')

>>> from datetime import datetime
>>> import pytz 
>>> dt = datetime.now(tz=pytz.UTC).replace(microsecond=0)
>>> print dt
2014-05-29 13:11:00+00:00
>>> dt.isoformat(' ')
'2014-05-29 13:11:00+00:00'
>>> dt.strftime('%Y-%m-%d %H:%M:%S%z')
'2014-05-29 13:11:00+0000'
Run Code Online (Sandbox Code Playgroud)

__str__datetime 的行为在偏移量中从哪里得到额外的冒号?我查看了格式化选项,并且只能分别为+ HHMM或名称找到%z和%Z.

我查看了实现,datetime.__str__但没有提示,只是说pass(?!).我认为它最终会委托,isoformat(' ')但我不明白如何/在哪里实施.

python timezone datetime timezone-offset

5
推荐指数
1
解决办法
3124
查看次数

如何从java中的时区偏移量获取时区?

我知道如何得到相反的结果。给定一个时区,我可以通过以下代码片段获取时区偏移量:

TimeZone tz = TimeZone.getDefault();
System.out.println(tz.getOffset(System.currentTimeMillis()));
Run Code Online (Sandbox Code Playgroud)

我想知道如何从时区偏移量获取时区名称。

鉴于,

timezone offset = 21600000(以毫秒为单位;+6.00 偏移量)

我想获得以下任何可能的时区名称的结果:

(GMT+6:00) Antarctica/Vostok
(GMT+6:00) Asia/Almaty
(GMT+6:00) Asia/Bishkek
(GMT+6:00) Asia/Dacca
(GMT+6:00) Asia/Dhaka
(GMT+6:00) Asia/Qyzylorda
(GMT+6:00) Asia/Thimbu
(GMT+6:00) Asia/Thimphu
(GMT+6:00) Asia/Yekaterinburg
(GMT+6:00) BST
(GMT+6:00) Etc/GMT-6
(GMT+6:00) Indian/Chagos
Run Code Online (Sandbox Code Playgroud)

java timezone calendar gregorian-calendar timezone-offset

5
推荐指数
1
解决办法
2万
查看次数

MST 被映射到 joda 中的丹佛时区,当前是 MDT。这是 joda DateTimeZone 中的错误吗?

我需要转换GMT为亚利桑那州时间。亚利桑那州目前已MST关闭夏令时。

然而在 Joda TimeDateTimeZone代码中,MST已映射到America/Denver

map.put("MST", "America/Denver");
Run Code Online (Sandbox Code Playgroud)

可以看出,目前丹佛实行夏令时,因此有MDTDateTimeZone那么为什么要在代码中进行这样的映射呢?

在从 转换为亚利桑那州本地时区时GMT,我得到了偏移量,因为GMT-6这是错误的,而且应该是这样GMT-7,因为MST没有夏令时。

这是一个错误吗?如何解决问题?

java jodatime timezone-offset

5
推荐指数
1
解决办法
1350
查看次数

SimpleDateFormat.parse() 忽略时区?

我正在尝试使用此代码来解析带有时区的日期字符串进行测试:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZZZZZ", Locale.US);
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse("2017-07-26T06:00-06:00"));
int offset = calendar.getTimeZone().getRawOffset();
Run Code Online (Sandbox Code Playgroud)

我正在尝试将时区从 更改-06+09,但offset始终包含10800000.

如何正确解析带有时区的日期(我需要时间和时区)?

android simpledateformat datetime-parsing timezone-offset

5
推荐指数
1
解决办法
2841
查看次数

以所需的时区显示从毫秒开始的正确时间

我正在开发一个应用程序,它从Google TimeZone API. 只是我有时间在地球上所需的地方以毫秒为单位。

例如:1504760156000它显示的是伦敦的日期时间

2017 年 9 月 7 日星期四 09:55:56

由于我在+05:00UTC 的时区,如果我操纵1504760156000这些毫秒,它将显示整个日期时间,如下所示:

2017 年 9 月 7 日星期四 09:55:56 GMT+0500(巴基斯坦标准时间)

但我想表明:

2017 年 9 月 7 日星期四 09:55:56 GMT+0100(英国夏令时间)

问题是:我有正确的伦敦日期和时间,但可以在不更改时间的情况下显示/更改时区,因为根据伦敦时间是正确的。

更新

得到一些评论后。在我的例子中,你没有把我带到这里。

假设我在巴基斯坦,时间在这里,1:55 PM所以我通过我的应用程序要求 GOOGLE API 告诉我伦敦的时间是什么时候。Google API 告诉我伦敦的时间是1504760156000(上午 9 点 55 分)以毫秒为单位,如果我将这些毫秒转换为Date对象,它将打印如下:

Date date =new Date(1504760156000)
Run Code Online (Sandbox Code Playgroud)

2017 年 9 月 7 日星期四 09:55:56 GMT+0500(巴基斯坦标准时间)

它会根据我的本地时区操作它,但我想要如下结果

2017 年 9 月 7 日星期四 09:55:56 …

timezone datetime android google-api timezone-offset

5
推荐指数
1
解决办法
6731
查看次数

PHP 计算两个时区之间的时差(以小时为单位)

我需要计算出两个时区之间的小时差,当前面的时区移动到第二天时,我遇到了一些问题。

例子:

//Let's say it is 11pm 23:00 in LA
$local_tz = new DateTimeZone('America/Los_Angeles');
$local = new DateTime('now', $local_tz);
$local_hour = $local->format('H');

//NY is 3 hours ahead, so it is 2am, 02:00
$user_tz = new DateTimeZone('America/New_York');
$user = new DateTime('now', $user_tz);
$user_hour = $user->format('H');
Run Code Online (Sandbox Code Playgroud)

按照这个问题中的例子(计算不同时区日期之间的小时数)我得到了一个不正确的结果:

$diff = $user_tz->getOffset($local);
error_log('$diff '.gmdate("H:i:s", $diff)); //outputs 20:00:00
Run Code Online (Sandbox Code Playgroud)

如果在洛杉矶是下午 4 点,那么在纽约是下午 7 点,那么很容易:

$time_diff = ($user_h - $local_h); //$time_diff = 3;
Run Code Online (Sandbox Code Playgroud)

但是当纽约移动到第二天时,我再次得到错误的结果:

$time_diff = ($user_h - $local_h); //$time_diff = -21;
Run Code Online (Sandbox Code Playgroud)

那么我该如何解释另一个时区已经移动到新的一天呢?

php time timezone date timezone-offset

5
推荐指数
2
解决办法
4856
查看次数

如何使用javascript中的时区名称和区域在UTC中查找时区偏移量

我正在从GoogleMicrosoft获取用户的日历时区。Google 在其日历 API响应中提供时区区域: timezone: Asia/Kolkata

虽然Microsoft Graph API提供了这样的时区详细信息,但timezone: 'Indian Standard Time' 我想以offset秒为单位找到时区以对日期对象执行一些操作。

是否有不同的方式或某些来源可以让我以csvjson的形式获取所有这些详细信息,这些详细信息可以导入到数据库表中并用于进一步的操作?

PS:我查看了一些示例,moment.js但发现它对我的用例没有帮助

javascript timezone datetime timezone-offset

5
推荐指数
1
解决办法
4417
查看次数

OffsetDateTime - 打印偏移量而不是 Z

我有这个代码:

String date = "2019-04-22T00:00:00+02:00";

OffsetDateTime odt = OffsetDateTime
      .parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME)                             
      .withOffsetSameInstant(ZoneOffset.of("+00:00"));

System.out.println(odt);
Run Code Online (Sandbox Code Playgroud)

这个打印: 2019-04-21T22:00Z

如何打印2019-04-21T22:00+00:00?用 offset 代替Z.

java datetime-format timezone-offset java-time

5
推荐指数
2
解决办法
2077
查看次数

无法获得 local 和 utc Instant

我需要以秒为单位获取本地时间和 UTC 时间。我在 StackOverflow 中阅读了一些帖子并找到了一些解决方案,正如前面提到的那样:

    Instant time = Instant.now();
    OffsetDateTime utc = time.atOffset(ZoneOffset.UTC);
    int utcTime = (int) utc.toEpochSecond();
    int localTime = (int) time.getEpochSecond();
    System.out.println("utc " + utcTime + " local " + localTime);
Run Code Online (Sandbox Code Playgroud)

但结果并不是我所期望的。现在是UTC时间。输出:

utc   1593762925
local 1593762925
Run Code Online (Sandbox Code Playgroud)

调试后我发现 Instant.now() 已经是 utc。我找不到如何在当前时区(即我的系统区域)中获取时间。

我在 API 中找到了一些解决方案,但出现错误:

OffsetDateTime utc = time.atOffset(ZoneOffset.of(ZoneOffset.systemDefault().getId()));
Run Code Online (Sandbox Code Playgroud)

线程“main”中的异常 java.time.DateTimeException:ZoneOffset 的 ID 无效,格式无效:Europe/Astrakhan 在 java.base/java.time.ZoneOffset.of(ZoneOffset.java:241)

UPD:我的问题是如何在本地时区和 UTC 中以秒为单位获取当前时间?即自 1970-01-01T00:00:00 GMT+4 和 1970-01-01T00:00:00 GMT+0 以来的秒数

UPD2:我有一些设备需要从 1970 年开始以秒为单位的 UTC 时间和以秒为单位的发件人本地时间响应。为什么?我不知道。对我来说是黑匣子。

java timezone-offset

5
推荐指数
1
解决办法
259
查看次数