我是java的新手,因此很长一段时间以来都无法解决这个问题.
我使用的是Windows XP,机器设置为TimeZone:Eastern Time(美国和加拿大).
我有一个Java应用程序,它获取当前系统时间和时区信息,并将如下字符串:20101012 15:56:00 EST写入文件.
上面的最后一条日期,即:时区,随着我改变系统日期,从EST变为EDT.
准确:从11月(例如:2009年11月)到3月(2010年3月),它是EST,否则是EDT.
EST是什么,我想总是不EDT.
是否有任何特定的类/功能,我总是可以将其作为EST读取?
等待回复.
谢谢你的回复.好吧,我忘了提几件事.
我希望我的机器设置为:在Windows时区设置中的东部时间(美国和加拿大).
简单来说,我想做的是:获取我的机器时间,并将其写入文本文件
我知道从3月到11月发生的夏令时.
但问题是,当我将机器时间写入文件时,如果不存在夏令时(DST),则写为2010 01 12 15:56:00美国东部时间,如果是夏令时,则为20101012 15:56:00当下.我担心的是,无论是否是夏令时,我都想写EST.
我有从数据记录器获得的时间序列数据,该数据记录器设置为一个时区而没有夏令时(NZST或UTC + 12:00),数据跨越几年.数据记录器不考虑DST更改,并且在有/无DST的情况下同步到本地时间(取决于部署它的人员).
但是,当我将数据输入R时,我无法正确使用as.POSIXct忽略DST.我在具有以下设置的Windows计算机上使用R 2.14.0:
> Sys.timezone()
[1] "NZDT"
> Sys.getlocale("LC_TIME")
[1] "English_New Zealand.1252"
Run Code Online (Sandbox Code Playgroud)
以下是春季DST变化的三个时间戳,每个时间间隔为1小时:
> ts_str <- c("28/09/2008 01:00", "28/09/2008 02:00", "28/09/2008 03:00")
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="")
[1] "2008-09-28 01:00:00 NZST" NA
[3] "2008-09-28 03:00:00 NZDT"
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="UTC")
[1] "2008-09-28 01:00:00 UTC" "2008-09-28 02:00:00 UTC"
[3] "2008-09-28 03:00:00 UTC"
Run Code Online (Sandbox Code Playgroud)
如您所见,时钟在1:59到3:00向前跳跃,因此2:00无效,因此NA.此外,我可以使用tz="UTC"它来忽略DST更改.但是,我宁愿保留正确的时区,因为我有其他数据系列记录了 DST(NZDT或UTC + 13:00),我想混合(通过merge)我的分析.
如何tz在MS Windows计算机上配置参数?我尝试过很多东西,比如"NZST","新西兰标准时间","UTC + 12:00","+ 1200"等,但没有运气.或者我修改其他一些设置?
处理DateTime用户提供的本地值时,由于夏令时转换,很可能会产生无效或模糊的时间.
在其他语言和框架中,通常有一些方法,例如isAmbiguous和isValid时区的某些表示.例如在.NET中,有TimeZoneInfo.IsAmbiguousTime和TimeZoneInfo.IsInvalidTime.
许多其他时区实现具有类似的方法或功能来解决这个问题.例如,在Python中,pytz库将抛出一个AmbiguousTimeError或InvalidTimeError异常,你可以捕获.
PHP有很好的时区支持,但我似乎找不到任何解决这个问题的方法.我能找到的最接近的东西是DateTimeZone :: getTransitions.这提供了原始数据,因此我可以看到一些方法可以在此基础上编写.但它们是否已存在于某个地方?如果没有,任何人都可以提供良好的实施吗?我希望他们的工作方式如下:
$tz = new DateTimeZone('America/New_York');
echo $tz->isValidTime(new DateTime('2013-03-10 02:00:00')); # false
echo $tz->isAmbiguousTime(new DateTime('2013-11-03 01:00:00')); # true
Run Code Online (Sandbox Code Playgroud) php的date_default_timezone_set是否适应夏令时?
我有这个代码,并想知道它是否总会导致正确的斯德哥尔摩时间?
date_default_timezone_set('Europe/Stockholm');
$timestamp = date("Y-m-d H:i:s");
Run Code Online (Sandbox Code Playgroud) 在2013年,英国将不会在3月31日之前开始夏令时.
TimeZoneInfo.ConvertTimeToUtc当我尝试将给定时间转换为UTC时间时,减去一小时.
为什么是这样?我是否需要告诉这种方法夏令时不活跃?
var now = new DateTime(DateTime.Now.Ticks, DateTimeKind.Unspecified);
var convertedTime = TimeZoneInfo.ConvertTimeToUtc(now, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard time"));
Console.WriteLine(convertedTime); // subtracts one hour, even though England time and GMT should be equal
Run Code Online (Sandbox Code Playgroud) 我从.Net服务返回UTC日期/时间列表,格式如下:
"2013-07-09 19:48:07 +00:00".
Run Code Online (Sandbox Code Playgroud)
在客户端上,我将每个字符串值转换为相应的基于UTC的时刻,就像这样
var fooUtc = new moment.utc(serverDateTimeString)
Run Code Online (Sandbox Code Playgroud)
在页面上,有一个下垂,其中包含用户可以更改的时区列表.这些绑定到时区对象的集合,如下所示:
{
id: "Central Standard Time",
label: "(UTC-06:00) Central Time (US & Canada)",
observesDaylightSavings: true,
baseUtcOffset: {
asHours: -6,
asMinutes: -360,
asText: "-06:00"
}
Run Code Online (Sandbox Code Playgroud)
然后我显示传递所选时区偏移的每个时刻,如下所示:
fooUtc.local().zone(selectedTimeZone.baseUtcOffset.asMinutes).format()
Run Code Online (Sandbox Code Playgroud)
但是,结果没有考虑夏令时,因为来自.Net的时区数据不能区分dst和非dst偏移.
有没有办法让这个工作与moment.js或新的时刻 - 时区位?我认为可以将标准UTC偏移名称(例如:"中央标准时间")映射到给定时区的Olson数据库标识符(例如:"America/Chicago"),但如果有更简单的方法,请让我知道.
我正在尝试设置一个DBMS_SCHEDULER作业,以便在每年1月1日凌晨1点在Oracle 11g上运行.如何设置其属性以确保它不会在错误的时间执行,因为时区差异或夏令时.
我花了很多时间浏览Oracle文档,但我还没有达到确定性水平.
顺便说一句,以下是我发现并考虑与该主题相关的规则:
工作属性
start_date 此属性指定计划启动此作业的第一个日期.如果start_date和repeat_interval保留为null,则作业将在计划启动后立即运行.对于重复使用日历表达式指定重复间隔的作业,start_date用作参考日期.第一次安排作业运行是当前日期或之后的日历表达式的第一个匹配.调度程序无法保证作业将在准确的时间执行,因为系统可能会过载,因此资源不可用.
repeat_interval此属性指定作业重复的频率.您可以使用日历或PL/SQL表达式指定重复间隔.评估指定的表达式以确定下次运行作业的时间.如果未指定repeat_interval,则作业将仅在指定的开始日期运行一次.有关详细信息,请参阅"日历语法".
Calendaring语法中的规则
我有一个关于处理夏令时的一般问题.我猜它不是特定于PHP的,但我用PHP编写,所以我认为包含它不会有什么坏处.
我有一个使用jquery fullcalendar构建的日历应用程序.用户在本地时区查看事件,我的服务器将它们存储为mysql中的UTC日期时间.(有关stackoverflow的其他问题表明这是处理时区的最佳方法.)因此,每次用户在日历上保存或查看事件时都会进行转换.这工作正常,但我很困惑如何最好地处理夏令时.
例如,假设时区EST(东部标准时间)的用户创建一个事件,当它不是夏令时,每天下午3点重复.我的PHP代码使用标准的DateTime(和DateTimeZone)类在UTC和EST之间转换UTC-5:00.当夏令时处于活动状态时,时钟将提前一小时,PHP将在UTC和EST之间转换UTC-4:00.从用户的角度来看,事件从原来的下午3点转移到下午4点.这不是我的用户和我想要的.无论夏令时如何,下午3点的活动都应该在下午3点举行.处理这个问题的最佳方法是什么?PHP中有没有办法忽略夏令时?
我的代码:
$getDate = new DateTime($storedDate, new DateTimeZone('UTC'));
$getDate->setTimezone(new DateTimeZone('America/New_York'));
$getDateString = $getDate->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)
更多信息:(从我下面的评论中复制)
- 仅存储重复事件的第一次出现.根据用户请求的日历视图(月,周或日视图)动态创建所有其他事件.通过我编码的方式,它只创建在视图上可见的事件.
- 问题是,我还需要为其他时区保持不变.继续原始示例,下午3点应该在美国东部时间下午3点(不管夏令时),但如果在中部时间观看事件,该事件也应该在下午2点(不管夏令时).
从本质上讲,我需要以某种方式忽略夏令时.
我正在尝试确定何时使用Perl localtime函数在Perl脚本中进行夏令时转换并使用打印时区strftime.
奇怪的是,这似乎适用于今年和其他近年来,但如果我尝试回到2000年,例如,Perl似乎认为过渡发生在错误的一天!
根据谷歌的说法,夏令时于2000年4月2日开始:
...但由于某种原因,下面的Perl代码似乎不同意:
use POSIX qw(strftime);
use Time::Local;
# 03/12/2000 01:59:59
($year, $month, $day, $hour, $minute, $second) = (2000, 3, 12, 1, 59, 59);
$epoch = timelocal($second, $minute, $hour, $day, $month - 1, $year);
# Print the time
print strftime "%m/%d/%Y %H:%M:%S - %Z\n", localtime($epoch);
# 03/12/2000 02:00:00
($year, $month, $day, $hour, $minute, $second) = (2000, 3, 12, 2, 0, 0);
$epoch = timelocal($second, $minute, $hour, $day, $month - 1, $year);
# Print the time …Run Code Online (Sandbox Code Playgroud) 我不住在使用夏令时的国家.
LocalDateTime,从UTC和ZoneIdDB中保留了偏移量LocalDateTime区域如果我申请ZoneId和偏移以获得该LocalDateTime区域,java.timeAPI 如何正确得到这个?它如何知道政府改变规则?它是否从互联网上获取更新?