EST5EDT的EST有何不同?EST不考虑DST吗?
我写了一个小的java片段来弄清楚差异和输出说EST5EDT考虑到DST,而EST没有
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss.SSS");
dateFormat.setTimeZone(TimeZone.getTimeZone("EST5EDT"));
System.out.println("EST5EDT" +dateFormat.format(new Date()));
/* prints EST5EDT2013-Apr-05 02:24:16.471 */
dateFormat = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss.SSS");
dateFormat.setTimeZone(TimeZone.getTimeZone("EST"));
System.out.println("EST "+dateFormat.format(new Date()));
/*prints EST 2013-Apr-05 01:24:16.472 */
Run Code Online (Sandbox Code Playgroud)
但下面的片段产生了令人震惊的输出
System.out.println("EST5EDT offset "+TimeZone.getTimeZone("EST5EDT").getRawOffset()/(60*60*1000));
/* prints 5 instead of 4 (DST) */
Run Code Online (Sandbox Code Playgroud)
有人可以解释这里究竟发生了什么吗?为什么getRawOffset返回5而不是4?如何使用DST获得时区偏移?
在Oracle中是否有顺畅的方法来获取当前时刻(当我执行调用时)SESSIONTIMEZONE和DBTIMEZONE之间的数字差异?
例如:
SELECT SESSIONTIMEZONE, DBTIMEZONE FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
返回:
+04:00 +07:00
Run Code Online (Sandbox Code Playgroud)
所以,我需要某种功能,通过调用给定参数,我得到这两个值之间的差异.
对于上面的例子:
SELECT get_numeric_offset(SESSIONTIMEZONE, DBTIMEZONE) FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
将返回-3(标志是至关重要的).
当然,我可以自己编写这个函数,通过使用字符串并解析它们然后进行一些算术运算或做类似的事情(我仍然不认为这是一个非常流畅的解决方案:
SELECT (
CAST(SYSTIMESTAMP AT TIME ZONE SESSIONTIMEZONE AS DATE) -
CAST(SYSTIMESTAMP AT TIME ZONE DBTIMEZONE AS DATE)
)*24
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
也许我错过了一些东西,Oracle实际上提供了一种计算两个给定时区之间差异的方法?
我们将 XML DateTime 值解析为 DateTimeOffset 值。根据DateTime 的 W3C XSD 文档,该类型可能有时区信息,也可能没有。
我们的要求是:
问题是,当没有时区的 XML DateTime 被解析为 DateTimeOffset 时,它默认使用本地(系统)时区。似乎无法覆盖默认时区,也无法识别时区是在内部解析还是添加的。
有什么方法可以指定 DateTimeOffset 解析使用的默认时区吗?
如果不是,如何确定在解析 DateTimeOffset 期间是否自动解析或添加了时区?
我觉得奇怪的是,不支持像设置当前区域性那样为 .NET 应用程序设置时区。
因此,解决此问题的唯一方法似乎是首先将值解析为 DateTime 并检查 Kind 属性。如果 Kind 不是Unspecified,则再次将该值解析为 DateTimeOffset:
/*
sample values:
- 2015-06-03T10:47:01
- 2015-06-03T07:47:01Z
- 2015-06-03T10:47:01+03:00
*/
DateTimeOffset dto;
var timeZone = TimeZoneInfo.FindSystemTimeZoneById(ConfigurationManager.AppSettings["DefaultTimeZone"]);
var dt = DateTime.Parse(value);
if (dt.Kind == DateTimeKind.Unspecified)
{
dto = new DateTimeOffset(dt, timeZone.GetUtcOffset(dt));
}
else
{
dto = DateTimeOffset.Parse(value);
}
Run Code Online (Sandbox Code Playgroud) 我有一个挑战,即后端数据始终以UTC时间存储.我们的前端数据始终在CST中显示.我无法访问这个"黑匣子".
我想在我们的数据仓库中反映这一点.它位于欧洲(CET).所以"本地"转换不起作用.
我想知道将UTC时间准确转换的最简单,最直接的方法(我可以将它以纪元毫秒或日期格式'2015-01-01 00:00:00')转换为中央标准时间.(根据夏令时落后5或6小时).
我看到很多关于转换到"本地"时间的线索......再次我不想要这个,我也不想简单地减去6个小时,这将是半年的错误.
有人有主意吗?这似乎是一个非常普遍的问题,但我一直在寻找,但一无所获.
javascript timezone datetime data-conversion timezone-offset
我必须计算出发机场和到达机场之间的总飞行时间.
这项工作由以下代码片段完成:
public int calculateFlightDuration(String departureDateTime, String depAirportCode, String arrivalDateTime,
String arrAirportCode) {
try {
LocalDateTime depLocalTime = LocalDateTime.parse(departureDateTime, formatter);
LocalDateTime arrLocalTime = LocalDateTime.parse(arrivalDateTime, formatter);
ZoneOffset depZoneOffset = getTimeZoneOffset(depAirportCode);
ZoneOffset arrZoneOffset = getTimeZoneOffset(arrAirportCode);
if (depZoneOffset != null && arrZoneOffset != null) {
OffsetDateTime offsetDepTime = OffsetDateTime.of(depLocalTime, depZoneOffset);
OffsetDateTime offsetArrTime = OffsetDateTime.of(arrLocalTime, arrZoneOffset);
Duration flightDuration = Duration.between(offsetArrTime, offsetDepTime).abs();
return (int) flightDuration.toMinutes();
}
} catch (Exception e) {
LOG.warn("::calculateFlightDuration depTime:{} dep.code:{} arrTime:{} arr.code:{}", departureDateTime,
depAirportCode, arrivalDateTime, arrAirportCode);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是问题所在: …
有一种简单的方法来从特定时区获取javascript中的unix时间戳吗?例如,我希望客户端发送一个unix时间戳,但我想让它与我的时区相匹配.
谢谢!
我正在开发一个Android应用程序,其目标是在PHP应用程序和智能手机之间同步事件.一切都适用于"常规"活动,但我有"全天"活动的问题.我按照官方Android文档,将EVENT_TIMEZONE设置为UTC并设置dtstart和dtend的时间戳,对应于午夜UTC.
但是,根据活动创建时的手机时区,当我打开Google日历时,活动包括:
您应该知道我的测试是在法国进行的,目前我们的格林威治标准时间+2.Google日历配置为使用手机时区.
这是在插入之前转储事件的信息:
06-22 17:41:02.339: V/EventEntity - addToCalendar(6535):
Event to be inserted :
calendar_id=8
dtstart=1466719200000 ( = 24/6/2016 0:00:00 )
eventLocation=
title=Server AllDay Event
dtend=1466805600000 ( = 25/6/2016 0:00:00 )
allDay=true
description=
hasAlarm=1
eventStatus=1
eventTimezone=UTC
Run Code Online (Sandbox Code Playgroud)
以下是执行事件插入的方法的代码,其中前一个日志来自:
Context context = AppContext.getAppContext();
ContentValues eventValues = this.getValuesForCalendar();
Log.v("EventEntity - addToCalendar", "Event to be inserted : " + eventValues);
Uri eventUri = context.getContentResolver().insert(Uri.parse("content://com.android.calendar/events"), eventValues);
this.setSystem_id(Long.parseLong(eventUri.getLastPathSegment()));
// …Run Code Online (Sandbox Code Playgroud) timezone android calendar google-calendar-api timezone-offset
我正在尝试将来自前端的值映射到ZoneId类,如下所示:
Optional.ofNullable(timeZone).map(ZoneId::of).orElse(null)
Run Code Online (Sandbox Code Playgroud)
对于大多数时区,它工作正常,但是,对于某些值,Java抛出异常:
java.time.zone.ZoneRulesException: Unknown time-zone ID: America/Punta_Arenas
Run Code Online (Sandbox Code Playgroud)
但是,根据IANA,它是一个有效的时区:https: //www.iana.org/time-zones
Zone America/Punta_Arenas -4:43:40 - LMT 1890
我在考虑为这些时区使用偏移量(只是硬编码值),但我想应该有更方便的方法来解决这个问题.有没有办法可以处理Java?
其他不受支持的时区:
我的Java版本:"1.8.0_121"Java(TM)SE运行时环境(版本1.8.0_121-b13)Java HotSpot(TM)64位服务器VM(版本25.121-b13,混合模式)
我使用的是Swift 4.2。我正在努力获取 UTC 和 iPhone 上的时间之间的偏移时间。
我有这个代码
extension TimeZone {
func offsetFromGMT() -> String
{
let localTimeZoneFormatter = DateFormatter()
localTimeZoneFormatter.timeZone = self
localTimeZoneFormatter.dateFormat = "Z"
return localTimeZoneFormatter.string(from: Date())
}
}
Run Code Online (Sandbox Code Playgroud)
func getCurrentTimeZone() -> String{
return String (TimeZone.current.identifier)
}
var tzOffset = ""
let currentTimeZone = getCurrentTimeZone()
TimeZone.knownTimeZoneIdentifiers.forEach({ timeZoneIdentifier in
if let timezone = TimeZone(identifier: timeZoneIdentifier)
{
//print("\(timezone.identifier) \(timezone.offsetFromGMT())")
if(timezone.identifier == currentTimeZone){
tzOffset = timezone.offsetFromGMT()
}
}
})
Run Code Online (Sandbox Code Playgroud)
如果我做
print(tzOffset)
Run Code Online (Sandbox Code Playgroud)
我有
-0500
Run Code Online (Sandbox Code Playgroud)
应该是-5因为我的 currentTimeZone 是吗America/Montreal …
给出 Influxdb 的 Flux 语言的以下查询:
from(bucket: "some-great-metrics")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> aggregateWindow(every: 1mo, fn: sum)
|> yield()
Run Code Online (Sandbox Code Playgroud)
假设我当前的时区是PST. 如何确保尊重该特定时区 ( ) 中持续时间aggregateWindow的开始和结束?1moPST
到目前为止,在文档中搜索并没有给我带来太多启发。