标签: timezone-offset

当使用使用夏令时的 Python 时区时,应该传递什么 tzinfo?

我正在尝试将日期字符串转换为日期时间,但找不到任何涉及哪些时区代码映射到哪些时区的可靠文档,特别是我正在处理利用夏令时的时区。

我有 4 个潜在的时区代码,我正在尝试确定将哪些内容传递给 tz.gettz 作为夏令时代码。

import dateutil.parser as p
import dateutil.tz as tz

tzinfos = {"CST": tz.gettz("America/Chicago"),
           "CDT": tz.gettz("?"),                # HERE
           "EST": tz.gettz("America/Eastern"),
           "EDT": tz.gettz("?")                 # HERE
           }

date_strings = ["Wed Mar 03 09:44:59 CST 2021",
                "Wed Mar 03 09:44:59 CDT 2021",
                "Wed Mar 03 09:44:59 EST 2021",
                "Wed Mar 03 09:44:59 EDT 2021"]

for s in date_strings:
    print(p.parse(s, tzinfos=tzinfos))
Run Code Online (Sandbox Code Playgroud)

日期字符串是通过我所在州交通部提供的 API 传入的,该 API 从州高速公路内置的传感器获取数据,最终目标是将它们全部转换为 UTC 时间,但我无法知道它们是什么UTC 时间应该是这样,所以我不能只是猜测时区然后验证它们。

我一直在浏览这个维基百科的时区页面 ,看起来好像与CDT相同CST,但tz.gettz("America/Chicago")我正在处理的应用程序将用于派遣急救人员应对交通事故,因此时间至关重要转换处理正确。我希望找到有关应传递给函数的内容的文档 …

python datetime dst timezone-offset

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

Unix C++:在不同的区域获得时间

我正在尝试使用C++在不同的时区(PST)获得时间.

#define PST (-8);
char* Time::getSecondSystemTime() {
    time_t rawtime;
    struct tm * timeinfo;
    char buffer[80];

    time(&rawtime);
    timeinfo = gmtime(&rawtime);

    timeinfo->tm_hour = timeinfo->tm_hour + PST;

    strftime(buffer, 80, "%I:%M %p", timeinfo);


    std::string temp = std::string(buffer); // to get rid of extra stuff
    std::string extraInfo = " Pacific Time ( US & Canada )";

    temp.append(extraInfo);

    return (char*) (temp.c_str());

}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,当GMT时间少于8小时(例如,现在,早上3点的时间),从它减去8小时不起作用!

在Unix中的不同时区获取时间的正确方法是什么?

c++ unix timezone unix-timestamp timezone-offset

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

如何在Qt 5.1中找出我当前位置的UTC偏移量?

我必须编写一个函数来返回当前位置的UTC偏移量.令我最大的惊喜,下面的代码返回0:

const QDateTime now = QDateTime::currentDateTime();
return now.toUTC().secsTo(now) / 60;
Run Code Online (Sandbox Code Playgroud)

qt utc qdatetime timezone-offset

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

PHP - 将字符串时区格式转换为偏移整数

非常简单:

PHP 以下列格式返回时区:

"America/Los_Angeles"
Run Code Online (Sandbox Code Playgroud)

我想将其转换为:

-7
Run Code Online (Sandbox Code Playgroud)

我找到了很多代码来转换它,计算与自定义函数的差异..但作为一个极简主义者,我无法相信没有一种更简单的方法(可能是日期时间函数)来立即获取值..有人知道这个吗?

php timezone datetime timezone-offset

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

从Date对象计算BST时间?

我已经回顾了几个关于类似主题的问题,但没有一个问题涉及计算目的地时区,将夏令时(夏令时)考虑在内.我正在尝试编写一个简单的小部件,向访问该页面的任何人显示特定时区的实时本地时间.感兴趣的时区是BST(什么是BST?),但如果可能的话,我很乐意看到任何语言环境的通用实现.这是我使用vanilla JavaScript的尝试:

function getBST() {
    var date = new Date(),
        utc = date.getTime() + date.getTimezoneOffset() * 60000,
        local = new Date(utc), // this is GMT, not BST
        day = local.getDate(),
        mon = local.getMonth() + 1,
        year = local.getFullYear(),
        hour = local.getHours(),
        minute = ('0' + local.getMinutes()).slice(-2),
        second = ('0' + local.getSeconds()).slice(-2),
        suffix = hour < 12 ? 'AM' : 'PM';

    hour = (hour - 24) % 12 + 12;

    return mon + '/' + day + …
Run Code Online (Sandbox Code Playgroud)

javascript date dst timezone-offset

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

Lua - 获取特定时区的时间和日期

我想要 Lua 中特定时区的时间和日期,以方式格式化,os.date("%a %b %d, %H:%M")将返回它。

我知道os.date("!%a %b %d, %H:%M")(添加感叹号“!”)给了我 UTC 时间,但我如何从那里移动并抵消请求的时间?

在我的情况下,所需的时区是UTC+08:00

timezone lua datetime date timezone-offset

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

如何在没有正确格式化 DST 的情况下获取时区偏移量?

我还没有找到一种在没有夏令时干扰的情况下获得时区偏移的方法。

LocalDateTime dt = LocalDateTime.now();
...
ZoneId zone = ZoneId.of(s);
ZonedDateTime zdt = dt.atZone(zone);
ZoneOffset offset = zdt.getOffset();
Run Code Online (Sandbox Code Playgroud)

这看起来是可行的,但初始 DataTime 可能会受到 DST 的影响。

还有这个:

int rawOffset = tZone.getRawOffset();
Run Code Online (Sandbox Code Playgroud)

然而,这总是一个正数,所以我们永远不会-05:00回来。

所以我想要的是一种在没有 DST 干扰的情况下获得偏移量的方法。有什么想法吗?

java timezone timezone-offset java-time

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

在Java中将时间戳转换为即时添加了不必要的时间偏移

我需要能够将存储在"datetime"字段中的MySQL数据库中提取的数据转换为Java ZonedDateTime对象.

ZonedDateTime dt = ZonedDateTime.ofInstant(rs.getTimestamp("Start").toInstant(), UTC_ZONE_ID)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是在我不需要toInstant()Timestamp对象上添加本地时间偏移,因为日期时间已经以UTC格式存储在数据库中.所以当我运行以下代码时:

ZonedDateTime startDT = 
        ZonedDateTime.ofInstant(rs.getTimestamp("Start").toInstant(),Globals.LOCALZONEID);
System.out.println(rs.getTimestamp("start"));
System.out.println(rs.getTimestamp("start").toInstant());
Run Code Online (Sandbox Code Playgroud)

我明白了:

2017-06-08 13:15:00.0
2017-06-08T17:15:00Z
Run Code Online (Sandbox Code Playgroud)

我需要时间组件保持不变.

我无法找到任何明显的问题解决方案,所以我在这里遗漏了什么?

java mysql datetime utc timezone-offset

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

通过Ruby / tzinfo获取给定日期的时区UTC偏移量?

对于任何了解tzinfoAPI的人来说,这可能都是微不足道的:

给定Timezone来自的对象tzinfo,我如何获得给定时间点的UTC偏移量(以时区或UTC的本地时间给出)?

ruby timezone datetime tzinfo timezone-offset

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

将没有 ZonedId 的字符串转换为 OffsetDateTime

我想将字符串转换为 OffsetDateTime 数据类型。字符串具有以下形状:

  2017-11-27T19:06:03
Run Code Online (Sandbox Code Playgroud)

我尝试了两种方法:

方法一

    public static OffsetDateTime convertString(String timestamp) {
        java.time.format.DateTimeFormatter formatter = new java.time.format.DateTimeFormatterBuilder()
            .parseCaseInsensitive()
            .append(java.time.format.DateTimeFormatter.ISO_LOCAL_DATE)
            .appendLiteral('T')
            .appendValue(HOUR_OF_DAY, 2)
            .appendLiteral(':')
            .appendValue(MINUTE_OF_HOUR, 2)
            .optionalStart()
            .appendLiteral(':')
            .appendValue(SECOND_OF_MINUTE, 2)
            .toFormatter();


        return OffsetDateTime.parse(timestamp, formatter);
    }
Run Code Online (Sandbox Code Playgroud)

方法二:

    public static OffsetDateTime convertString(String timestamp) {
        java.time.format.DateTimeFormatter parser = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
        java.time.LocalDateTime dt = java.time.LocalDateTime.parse(timestamp, parser);
        ZonedDateTime zdt = ZonedDateTime.of(dt, java.time.ZoneId.of("UTC"));
        return OffsetDateTime.from(zdt);
    }
Run Code Online (Sandbox Code Playgroud)

第一种方法不起作用,因为它抱怨以下内容:

java.time.format.DateTimeParseException:无法解析文本“2017-11-27T19:02:42”:无法从 TemporalAccessor 获取 OffsetDateTime:{},ISO 解析为 java 类型的 2017-11-27T19:02:42 .time.format.Parsed

据我所知,它来自字符串没有 ZoneId 的事实。如何在格式化程序上覆盖 ZoneId 以忽略它?

第二种方法来自这个问题并且有效,但它需要 2 个额外的转换,我想避免这些额外的转换。

任何帮助将不胜感激。

java datetime timezone-offset zoneddatetime

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