1

我需要显示具体时区的日期,包括 DST(欧洲时间)。应用程序将在立陶宛使用,因此时区为夏季+3,其他时间+2。问题是,我只有一个日期列表,我不知道如何为夏季日期显示 +3 为其他日期显示 +2。目前,我有时区:

// Eastern European Summer Time UTC + 3 hours
NSTimeZone *timeZoneWithDst = [NSTimeZone timeZoneWithAbbreviation:@"EEST"];

//Eastern European Time UTC + 2 hours
NSTimeZone *timeZoneWithoutDst = [NSTimeZone timeZoneWithAbbreviation:@"EET"];

但是如何遍历我的日期列表并计算我应该添加 +3 还是 +2 到日期?

更新最后,我通过应用 Martin R. 建议按名称使用时区,而不是通过缩写来实现它。这样,具有该时区的日期会自动处理 DST。这是我转换日期的代码:

NSTimeZone *TimeZone = [NSTimeZone timeZoneWithName:@"Europe/Vilnius"];
NSInteger seconds = [myTimeZone secondsFromGMTForDate:someDate];
NSDate *result = [NSDate dateWithTimeInterval:seconds sinceDate:someDate];
4

2 回答 2

1

要将NSDatea 转换为字符串表示形式,请使用NSDateFormatter. 默认情况下,它使用本地时区。要根据具体时区显示日期,您可以设置

NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"Europe/Vilnius"];
[dateFormatter setTimeZone:tz];

(根据http://www.timezoneconverter.com/cgi-bin/findzone,立陶宛的时区是“欧洲/维尔纽斯”。)

于 2013-07-10T11:09:51.110 回答
0

这是一个非常相似的替代方案,在 Swift 中对我有用:

    var currentDate: NSDate {
    let currentLocalTime = NSDate()

    let localTimeZone = NSTimeZone.systemTimeZone()
    let secondsFromGTM = NSTimeInterval.init(localTimeZone.secondsFromGMT)
    let resultDate = NSDate(timeInterval: secondsFromGTM, sinceDate: currentLocalTime)

    return resultDate
}
于 2015-10-09T08:35:07.937 回答