NSDateformatter stringFromDate在iOS 10.3.1simulator中返回错误的时间字符串

时间:2017-10-31 14:32:45

标签: ios objective-c nsdate nsdateformatter

我有这个方法将date转换为string:

- (NSString*)getDateTimeBasedOnDeviceTimeFormat:(NSDate *)theDate{

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    NSDate *dateSource;
    NSString *dateStr;

    [dateFormatter setLocale:[NSLocale currentLocale]];
    if (theDate) {
        dateSource = theDate;
    } else {
        dateSource = [NSDate date];
    }

    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; //tried local timezone
    [dateFormatter setDateStyle:NSDateFormatterLongStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];

    dateStr = [dateFormatter stringFromDate:dateSource];

    return dateStr;
}

对于iOS 10.3.1:

返回值 2017年10月31日下午2:26 (这是错误的)

对于iOS 11:

返回值 2017年10月31日上午10:26 (这是正确的)

两个模拟器都设置了相同的语言和区域。英语(美国)。

enter image description here

enter image description here

mac日期时间设置:

enter image description here 我不知道为什么这个转换在iOS 10.3.1中显示错误

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

编辑以下是一个总结该问题的雷达:Versions of the iOS simulator for anything other than 11.0 and 11.1 use GMT instead of the macOS time zone.

我也注意到了这一点,但仅限 Mac OS 10.13.1中的所有非11 iOS模拟器

这是另一个例子:

import Foundation
let formatterUTC = DateFormatter()
formatterUTC.locale = Locale(identifier: "en_GB")
formatterUTC.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"
formatterUTC.timeZone = TimeZone(abbreviation: "UTC")
let d = formatterUTC.date(from:"2017-07-01T12:00:00Z")

let formatter24 = DateFormatter()
formatter24.locale = Locale(identifier: "en_GB")
formatter24.dateFormat = "HH:mm"
let s = formatter24.string(from:d!) // ⚠️ "12:00" on iOS <= 10.3.1, Mac OS 10.13.1,
                                    //    "13:00" elsewhere! ⚠️

答案 1 :(得分:1)

您在测试10.3.1时遇到的问题非常类似。在调试我的dateFormatter时,我注意到模拟器上的时区总是回到&#34; GMT&#34;。它似乎没有正确使用我的电脑设置。

让timeZone = TimeZone.current.abbreviation()//生成&#34; GMT&#34;在iOS 10和&#34; PDT&#34;在iOS 11上

所以我在物理设备上进行了测试,所有内容都正常显示。我至少在10.3.1 sims上将这个问题归咎于Apple Simulator的bug。希望这有所帮助,我希望你有额外的设备可以测试!