我正在尝试将日期字符串转换为日期时间,但找不到任何涉及哪些时区代码映射到哪些时区的可靠文档,特别是我正在处理利用夏令时的时区。
我有 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")我正在处理的应用程序将用于派遣急救人员应对交通事故,因此时间至关重要转换处理正确。我希望找到有关应传递给函数的内容的文档 …
我正在尝试使用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中的不同时区获取时间的正确方法是什么?
我必须编写一个函数来返回当前位置的UTC偏移量.令我最大的惊喜,下面的代码返回0:
const QDateTime now = QDateTime::currentDateTime();
return now.toUTC().secsTo(now) / 60;
Run Code Online (Sandbox Code Playgroud) 非常简单:
PHP 以下列格式返回时区:
"America/Los_Angeles"
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
-7
Run Code Online (Sandbox Code Playgroud)
我找到了很多代码来转换它,计算与自定义函数的差异..但作为一个极简主义者,我无法相信没有一种更简单的方法(可能是日期时间函数)来立即获取值..有人知道这个吗?
我已经回顾了几个关于类似主题的问题,但没有一个问题涉及计算目的地时区,将其夏令时(夏令时)考虑在内.我正在尝试编写一个简单的小部件,向访问该页面的任何人显示特定时区的实时本地时间.感兴趣的时区是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)我想要 Lua 中特定时区的时间和日期,以方式格式化,os.date("%a %b %d, %H:%M")将返回它。
我知道os.date("!%a %b %d, %H:%M")(添加感叹号“!”)给了我 UTC 时间,但我如何从那里移动并抵消请求的时间?
在我的情况下,所需的时区是UTC+08:00。
我还没有找到一种在没有夏令时干扰的情况下获得时区偏移的方法。
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 干扰的情况下获得偏移量的方法。有什么想法吗?
我需要能够将存储在"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)
我需要时间组件保持不变.
我无法找到任何明显的问题解决方案,所以我在这里遗漏了什么?
对于任何了解tzinfoAPI的人来说,这可能都是微不足道的:
给定Timezone来自的对象tzinfo,我如何获得给定时间点的UTC偏移量(以时区或UTC的本地时间给出)?
我想将字符串转换为 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 个额外的转换,我想避免这些额外的转换。
任何帮助将不胜感激。