【问题标题】:Swift timezones with winter/summer times带有冬/夏时间的快速时区
【发布时间】:2015-07-24 22:49:24
【问题描述】:

我正在研究世界时钟,并且我已经得到了各个国家的时间:

    let date = NSDate(); 
    var beltz = NSDateFormatter();
    beltz.dateFormat = "HH:mm";
    beltz.timeZone = NSTimeZone(name: "Europe/Brussels")
    let belTzStr = beltz.stringFromDate(date);
    println(belTzStr) //<-- correct time

我的问题是当夏季/冬季时间调整 +- 1 小时时,NSTimeZone 会在代码中反映这种调整吗?如果没有,我该如何实现?

【问题讨论】:

    标签: swift time timezone


    【解决方案1】:

    考虑这个修改后的代码:

    let cal = NSCalendar.currentCalendar()
    cal.timeZone =  NSTimeZone(name: "America/Phoenix")!
    let date = cal.dateWithEra(1, year: 2015, month: 12, day: 24, hour: 16, minute: 0, second: 0, nanosecond: 0)!
    //date = NSDate();
    var beltz = NSDateFormatter();
    beltz.dateFormat = "dd MMMM HH:mm zzzz";
    beltz.timeZone = NSTimeZone(name: "Europe/Brussels")
    let belTzStr = beltz.stringFromDate(date);
    print(belTzStr) //<-- correct time
    

    我修改了您的代码以将时间添加为 Phoenix AZ,它不使用夏令时并添加了一些额外的格式,尤其是打印数据的 TZ。

    现在,如果您使用 12 月(两个地区都没有 DST)

    let date = cal.dateWithEra(1, year: 2015, month: 12, day: 24, hour: 16, minute: 0, second: 0, nanosecond: 0)!,

    你得到

    12 月 25 日 00:00 中欧标准时间

    如果您使用 7 月(欧盟的 DST)

    let date = cal.dateWithEra(1, year: 2015, month: 7, day: 24, hour: 16, minute: 0, second: 0, nanosecond: 0)!,

    你得到

    中欧夏令时间 7 月 25 日 01:00

    所以是的,它会适当地调整 TZ。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 2016-11-07
      • 2019-06-18
      • 1970-01-01
      • 2021-12-23
      • 2021-03-27
      相关资源
      最近更新 更多