在2013年6月1日,我预计"PST8PDT"时区的行为与GMT + 7一样,因为它是该时区的夏令时.但是,它的行为类似于GMT + 8:
>>> import pytz, datetime
>>> Pacific = pytz.timezone("PST8PDT")
>>> datetime.datetime(2013, 6, 1, 12, tzinfo=Pacific).astimezone(pytz.utc)
datetime.datetime(2013, 6, 1, 20, 0, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)
相比之下,在2013年1月1日,它表现得(正确)像GMT + 8:
>>> datetime.datetime(2013, 1, 1, 12, tzinfo=Pacific).astimezone(pytz.utc)
datetime.datetime(2013, 1, 1, 20, 0, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?提前致谢!
我正在使用TimeZoneInfo在客户端wallclock'Eastern Time'和UTC之间进行转换.我的问题是在秋季DST更改期间发生的"重复"小时.
从UTC到Eastern的转换期间:
2010-11-07 06:00 UTC - >给出2010-11-07T 01:00:00-03:30
2010-11-07 07:00 UTC - >给出2010-11 -07T 01:00:00-03:30
我怎么知道哪个是第一个小时,哪个是第二个小时?DateTime.IsDaylightSavingTime()在两个小时都返回false,但是它不应该在第一个小时返回true吗?
同样,我如何存储2010-11-07 01:00:00 -03:30?如何将我的应用程序转换为UTC,因为它可能是2010-11-07 06:00或2010-11-07 07:00
对于那些需要代码的人,我骑自行车穿过一个带有UTC日期时间列的数据表,尝试使用'DupHr'列转换为东部第二个重复小时,但我总是在01:00时结束'DupHr'= 1.
TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime EasternTime;
DateTime DuplicateHour = new DateTime(2010, 11, 7, 1, 0, 0); // hard coded for this example
TimeZoneInfo.AdjustmentRule[] rules = est.GetAdjustmentRules();
foreach (DataRow row in dt.Rows)
{
row["DupHr"] = 0; // by default not duplicate hour
EasternTime = TimeZoneInfo.ConvertTimeFromUtc((DateTime)row[UTCColumnName], est);
if (!EasternTime.IsDaylightSavingTime())
{
if …
Run Code Online (Sandbox Code Playgroud) 我正在处理日历应用程序.在这个来自不同时区的用户创建/查看事件.我想按照以下方法以UTC格式保存事件时间并在用户的本地时间显示它们.注意:用户具有首选时区设置.
要将事件开始时间保存为UTC时间戳:
$timezone = new DateTimeZone( $user_timezone_name );
$utcOffset = $timezone->getOffset( new DateTime( $event_start_time_string_local ) );
$event_start_timestamp_local = maketime( $event_start_time_string_local );
//Now add/subtract $utcOffset to/from $event_start_timestamp_local to get event's start //time timestamp in UTC and save this result in DB.
Run Code Online (Sandbox Code Playgroud)
要在用户的时区中获取事件开始时间:
date_default_timezone_set( $user_timezone_name );
$eventTimeLocalTime = date("Y-m-d H:i:s", $event_start_timestamp_in_UTC );
Run Code Online (Sandbox Code Playgroud)
哪里:
user_timezone_name is user's timezone setting.
event_start_time_string_local is event's start time string in local/civil time.
event_start_timestamp_in_UTC is event's start time timestamp in UTC.
Run Code Online (Sandbox Code Playgroud)
我的问题:
参考文献: - do-phps-date-default-timezone-set-adjust-to-daylight-saving …
我需要在SQL服务器中创建一个函数,该函数返回夏令时开始日期时间和夏令时结束日期时间.
我在网上看到了一些例子,但他们都使用了3月的第1个日期和11月的第1个日期,这在技术上并不正确.
夏令时从3月的第2个星期日凌晨2点开始,到11月的第一个星期日凌晨2点结束.
我从下面的代码开始,但我确定它错了.任何帮助表示赞赏!:)
DECLARE @DSTSTART DATETIME
SELECT @DSTSTART = CASE WHEN
DATEPART(MONTH, SYSDATETIME()) = 3
AND DATEPART(weekday, SYSDATETIME()) = 1
AND DATEDIFF(week,dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, SYSDATETIME()), 0)), 0), SYSDATETIME() - 1) = 2
AND DATEPART(HOUR, SYSDATETIME()) = 2
THEN SYSDATETIME()
END
RETURN (@DSTSTART)
END
GO
Run Code Online (Sandbox Code Playgroud) 如果我在秋季结束时点亮时间(2014-10-26 02:00:00 CET in Denmark)并减去一小时(所以我希望回到02:00 CEST)然后将分钟设置为零,我得到一些奇怪的结果:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("CET"));
cal.set(Calendar.YEAR, 2014);
cal.set(Calendar.MONTH, Calendar.OCTOBER);
cal.set(Calendar.DAY_OF_MONTH, 26);
cal.set(Calendar.HOUR_OF_DAY, 2);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
System.out.println(cal.getTimeInMillis()); // 1414285200000 : 01:00:00 UTC
cal.add(Calendar.HOUR_OF_DAY, -1);
System.out.println(cal.getTimeInMillis()); // 1414281600000 : 00:00:00 UTC (as expected)
cal.set(Calendar.MINUTE, 0);
// or: cal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE));
// both should be NOPs.
System.out.println(cal.getTimeInMillis()); // 1414285200000 : 01:00:00 UTC (Why?!)
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?我知道Java Calendar有一些奇怪的约定,但我看不出这是如何正确的.
使用Calendar类减去一小时并将分钟设置为0的正确方法是什么?
长话短说
是否存在PHP5在东部标准时间内识别的官方未弃用时区 - 而不是东部日光时间?
短篇小说:-P
哇,我无法相信PHP会因为设置时间而产生这样的群集.
我想使用PHP5的date_default_timezone_set()来设置我的脚本的时区.我想用标准时间.我不希望我的脚本观察夏令时.我不想每次程序写入时都使用gmtime()并减去60*60*5秒.我也不想将该值保存到变量中.设置默认时区更加优雅,使脚本更易于移植到其他服务器和区域设置.
不幸的是,PHP要求我在设置默认时区时使用其中一个愚蠢的"官方时区".有一个"America/New_York",但我不知道它或任何官方PHP时区是否遵守夏令时.通过实验,我发现"America/New_York"确实观察到DST."美国/巴拿马"是美国东部时间,因此没有观察到夏令时......但是,如果巴拿马未来应该改变他们对夏令时的看法呢?(他们在1908年观察到DST)
因为巴拿马总能改变主意; 我只想使用GMT或UTC偏移量.
然后有这个......
http://us.php.net/manual/en/timezones.others.php
我假设的上述链接列表是不推荐使用的时区."EST"在那里但是以美国为中心,所以我理解为什么它被弃用了."Ect/GMT-5"也在那里,我完全不知道为什么会被弃用.如果你问我,所有的地名时区应该被弃用,GMT时区也不推荐......但是得到这个......"Ect/GMT-5"实际上是错的!我不得不使用"Ect/GMT + 5"来获得美国的东部标准时间.我很确定我不会在东海岸的英格兰前5小时.
没有人真正回答这个问题.所以我想我会自己回答."不,PHP5认可东部标准时间没有,没有弃用的时区"
很多人告诉我,我应该将日期存储为UTC时间,并将它们转换为当地时间,当我将它们从存储中取出时 - 我已经知道了.问题是,我被雇用只修复脚本的这一小部分而且我怀疑这个人是否会让我重新编写他自PHP开始以来一直在使用的整个代码.
我会不情愿地向那些向您展示如何正确存储和检索时间的家伙表示赞赏,以便将来寻找这个的人学习如何以正确的方式做到这一点.
我想知道我是在冬天还是夏天.我目前的做法是:
if date +%Z | grep -e CET -e EST; then
# I'm in winter time
else
# I'm in summer time
fi
Run Code Online (Sandbox Code Playgroud)
这有明显的缺点,因为你必须知道所有的时区名称.
在PHP中,您可以通过使用以下内容来判断给定日期是否在夏令时期间:
$isDST = date("I", $myDate); // 1 or 0
Run Code Online (Sandbox Code Playgroud)
问题是,这只会告诉您一个时间点是否在夏令时.是否有可靠的方法来检查DST是否在该时区的任何时间生效?
编辑澄清:
我想知道是否会有一些现有的方法,或者一种方法来实现一个如此工作的方法:
timezoneDoesDST('Australia/Brisbane'); // false
timezoneDoesDST('Australia/Sydney'); // true
Run Code Online (Sandbox Code Playgroud) 我有一个代码如下:
from django.utils.timezone import get_current_timezone, make_aware
make_aware(some_datetime, get_current_timezone())
Run Code Online (Sandbox Code Playgroud)
该make_aware
呼叫偶尔引发
AmbiguousTimeError: 2013-11-03 01:23:17
Run Code Online (Sandbox Code Playgroud)
我从Django文档中了解到这是一个夏令时问题,而且这个时间戳实际上是模棱两可的.现在我该如何解决它(比如这可能是两个可能的第一个)?