标签: dst

TimeZoneInfo是否考虑了DST?

在时区之间进行转换时,C#是否会考虑夏令时?

我有一个源日期在伦敦的当前时间,我想将其转换为我的时区(CET).这是我正在使用的代码.

DateTime time = DateTime.ParseExact(timeString, "HH:mm", null);
time = DateTime.SpecifyKind(time, DateTimeKind.Unspecified);

//Convert it to the right timezone. It is currently in GMT

TimeZoneInfo gmt = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
TimeZoneInfo current = TimeZoneInfo.Local;

DateTime utc = TimeZoneInfo.ConvertTimeToUtc(time, gmt);
DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, core.startTime = local;
Run Code Online (Sandbox Code Playgroud)

它目前运作良好.然而,当DST出现丑陋的头脑时,它会继续工作还是会破坏它?由于过去遇到过很多问题,我对TimeZones有点警惕.

c# timezone dst

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

令人困惑的mktime()函数行为:将tm_hour计数增加1

我正在执行下面的代码.

int main()
{
struct tm storage={0,0,0,0,0,0,0,0,0};
char *p = NULL; 
p = (char *)strptime("2012-08-25 12:23:12","%Y-%m-%d %H:%M:%S",&storage);
char buff[1024]={0};
strftime(buff,1024,"%Y-%m-%d %H:%M:%S",&storage);
cout << buff << endl;
storage.tm_sec += 20;
strftime(buff,1024,"%Y-%m-%d %H:%M:%S",&storage);
cout << buff << endl;
mktime(&storage);
strftime(buff,1024,"%Y-%m-%d %H:%M:%S",&storage);
cout << buff << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果以上程序执行,则打印'2012-08-25 13:23:32'而不是'2012-08-25 12:23:32'.请帮助,为什么它增加了tm_hour值.如果我在程序中输入日期为"2012-02-25 12:23:32",这可以正常工作,这很令人困惑.

输出 - >

[user@rtpkvm55-vm2 root]$ ./a.out
2012-08-25 12:23:12
2012-08-25 12:23:32
2012-08-25 13:23:32
[user@rtpkvm55-vm2 root]$
Run Code Online (Sandbox Code Playgroud)

我系统上的日期信息, - >

[user@rtpkvm55-vm2 root]$ date
Sat Aug 25 08:28:26 EDT 2012
Run Code Online (Sandbox Code Playgroud)

c++ mktime dst

12
推荐指数
2
解决办法
8206
查看次数

从Django的make_aware解析AmbiguousTimeError

我有一个代码如下:

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文档中了解到这是一个夏令时问题,而且这个时间戳实际上是模棱两可的.现在我该如何解决它(比如这可能是两个可能的第一个)?

python django timezone dst

12
推荐指数
2
解决办法
5722
查看次数

1974年Javascript中的夏令时?

"在"能源危机"时期,国会通过了白昼时间的早期开始日期.1974年,白昼时间从1月6日开始,1975年开始于2月23日.在这两年后,开始日期又回到了上周日. 4月."
(通过http://aa.usno.navy.mil/faq/docs/daylight_time.php)

这些日期的Javascript日期对象中似乎存在错误.如果你将127627200000毫秒转换为日期,它应该是美国东部时间1974年1月17日00:00:00.这在http://www.fileformat.info/tip/java/date2millis.htm上是正确的,但在 http: //www.esqsoft.com/javascript_examples/date-to-epoch.htm,表示它将转换为1974年1月16日星期三19:00 23:00:00 GMT-0500(东部标准时间).如果您在javascript中创建一个新的日期(127627200000)对象,它将提供后一个日期转换.这种情况发生在所有主流浏览器

我无法想象这是第一次这对任何人来说都是一个问题,但我在网上搜索时找不到任何其他问题.有没有人知道是否有一个现有的修复程序或更容易修复,而不是手动检查日期Javascript的转换错误?还有其他日期这是一个问题吗?

javascript dst

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

Python中的夏令时

我正在编写一个程序,它可以处理很多时区并将它们交叉.我最常处理的两件事是从"now"创建一个datetime对象,然后本地化一个天真的datetime对象.

要在太平洋时区创建一个日期时间对象,我目前正在这样做(python 2.7.2+)

from datetime import datetime
import pytz
la = pytz.timezone("America/Los_Angeles")
now = datetime.now(la)
Run Code Online (Sandbox Code Playgroud)

对于夏令时,这是正确的吗?如果没有,我想我应该这样做:

now2 = la.localize(datetime.now())
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么?任何人都可以告诉我第一个错误的情况,秒是对的?

至于我的秒问题,假设我在加利福尼亚州洛杉矶上午8:00的某个用户输入中有一个天真的日期和时间.是这样制作日期时间的正确方法:

la.localize(datetime(2012, 9, 1, 8, 0))
Run Code Online (Sandbox Code Playgroud)

如果没有,我应该如何构建这些日期时间?

python datetime pytz dst

11
推荐指数
3
解决办法
3万
查看次数

处理我们切换到夏令时和返回时的日期

我想用R进行时间序列分析.我想制作一个时间序列模型,并使用包timeDate和预测中的函数.

我在CET时区有日内数据(15分钟数据,每小时4个数据点).在3月31日实施了夏令时,我错过了我通常拥有的96个数据点.10月28日,随着时间的推移,我有4个数据点太多了.

对于我的时间序列模型,我总是需要96个数据点,否则日内季节性会变得混乱.

你有这方面的经验吗?你知道一个R函数或一个有助于自动化这种数据处理的包 - 一些优雅吗?谢谢!

timezone datetime r dst

11
推荐指数
2
解决办法
9010
查看次数

jodatime如何知道夏令时是否开启

我有一个需要时区的API.例如.如果我在加利福尼亚州,我需要在夏令时(加利福尼亚州,PDT是格林尼治标准时间 - 7)和-8时,在夏令时关闭时将-7传递给它.但我无法弄清楚是否在当前日期,夏令时开启或关闭.

Date date1 = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
double[] coords = db.getCoords(id1);
double latitude = coords[0];
double longitude = coords[1];
double timezone = -7; /* For Pacific daylight time (GMT - 7)*/

ArrayList<String> Times = Class.foo(cal, latitude,
longitude, timezone);
Run Code Online (Sandbox Code Playgroud)

我已经安装了JodaTime,即使在那里我也找不到办法.请建议如果本机java或jodatime,要么有办法这样做.

timezone android jodatime dst

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

Mysql将TIMESTAMP转换为INTEGER - 时区

我需要在MySQL(InnoDB)DB中将一些TIMESTAMP字段转换为INT.我意识到将TIMESTAMP转换为INT是不寻常的,但我们仍然需要这样做:)

看起来很简单,但有一些时区和夏令时错误.

我有一个脚本,每列生成我的SQL代码.例如,它生成:

ALTER TABLE alarmLog ADD COLUMN started_tmp INT UNSIGNED;
UPDATE alarmLog SET started_tmp = UNIX_TIMESTAMP(started);
ALTER TABLE alarmLog DROP started;
alter TABLE alarmLog CHANGE started_tmp started INT UNSIGNED NULL DEFAULT 0;
Run Code Online (Sandbox Code Playgroud)

如果我比较使用前后数据select FROM_UNIXTIME(1291788036);,结果看起来不错.

然后,我们的想法是将所有客户端软件更改为转换为UTC,并在存储时使用该INT.检索时,该INT将转换为当前时区.

但后来文档警告我这个场景(CET中的夏令时):

mysql> SELECT UNIX_TIMESTAMP('2005-03-27 02:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 02:00:00') |
+---------------------------------------+
|                            1111885200 |
+---------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 03:00:00') |
+---------------------------------------+
|                            1111885200 |
+---------------------------------------+
1 row in set (0.00 …
Run Code Online (Sandbox Code Playgroud)

mysql timestamp dst

11
推荐指数
1
解决办法
3万
查看次数

AlarmManager:如何安排每日警报并处理时间变化

我需要在给定的时间每天设置一个闹钟.我正在使用编程警报AlarmManager.RTC_WAKEUP,因此它使用系统时间作为参考.我将警报设置为首先在所需的小时执行,然后每天重复:

    alarmManager.setRepeating(
        AlarmManager.RTC_WAKEUP,
        getTimestampToday("12:00"),
        AlarmManager.INTERVAL_DAY,
        pendingIntent
    );
Run Code Online (Sandbox Code Playgroud)

getTimestampToday方法在所需的小时返回今天的长时间戳.它通过获取今天的本地日期,然后设置所需的小时,最后将其转换回时间戳(基于UTC)来实现.

这里的问题是警报应该根据当地时间工作.因此,如果在安排警报后更改时间(例如,DST时间更改,或者用户前往其他国家/地区,或者他手动更改日期,时间或时区),则警报将在错误的当地时间触发下次.

例:

  1. 警报设置为在上午8:00首先触发,每天重复(意味着间隔86400秒).
  2. 那天晚上,自动DST时间变化发生在凌晨3点,将时钟倒回到凌晨2点.
  3. 第二天早上,闹钟在早上7点开火,这是错误的.

该应用程序应该运行很长一段时间(它是一个仅供企业使用的自助服务终端应用程序).我在应用程序启动时重新安排警报,但这并不能解决我的问题,因为应用程序可以运行数天而无需重新启动.我需要检测时间的变化,以便根据新的本地时间再次安排警报.

我正在使用这个接收器:

    <receiver android:name="foo.bar.receivers.TimeChangeReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.ACTION_TIMEZONE_CHANGED" />
            <action android:name="android.intent.action.ACTION_TIME_CHANGED" />
            <action android:name="android.intent.action.DATE_CHANGED"></action>
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

它会检测日期更改,但不适用于时间更改或时区更改.(在运行OS 4.0.3的平板电脑上测试过).这真的很奇怪,因为我可以清楚地看到在logcat中广播的事件.

所以我的问题:

  • 为什么我的BroadcastReceiver没有收到ACTION_TIMEZONE_CHANGEDACTION_TIME_CHANGED事件,我怎么能解决它.
  • 这些意图会检测到DST时间变化吗?
  • 如果不可能,是否有更好的方法在当地时间编程报警并处理时间变化?

提前致谢.

java android broadcastreceiver dst alarmmanager

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

为什么我不能将系统时间设置为接近夏令时转换的时间

我的时代,他们正在改变,也就是说,因为我需要他们.我正在测试一些涉及我使用的调度程序的情况,这涉及到夏令时之间转换的行为.

代码

这篇文章我得到了一个工作方法,使我能够以编程方式更改系统日期(重新发布大部分代码):

[StructLayout(LayoutKind.Sequential)]
public struct SYSTEMTIME
{
    public short wYear;
    public short wMonth;
    public short wDayOfWeek;
    public short wDay;
    public short wHour;
    public short wMinute;
    public short wSecond;
    public short wMilliseconds;
}

[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool SetSystemTime(ref SYSTEMTIME st);
Run Code Online (Sandbox Code Playgroud)

为了我自己的方便,我只是在我实际调用的函数中包装它:

public static void SetSytemDateTime(DateTime timeToSet)
{
    DateTime uniTime = timeToSet.ToUniversalTime();
    SYSTEMTIME setTime = new SYSTEMTIME()
    {
        wYear = (short)uniTime.Year,
        wMonth = (short)uniTime.Month,
        wDay = (short)uniTime.Day,
        wHour = (short)uniTime.Hour,
        wMinute = (short)uniTime.Minute, …
Run Code Online (Sandbox Code Playgroud)

.net c# timezone datetime dst

11
推荐指数
2
解决办法
1420
查看次数