NSDateformatter stringFromDate在iOS 10.3.1模拟程序中返回错误的时间字符串
我有一个将日期转换为字符串的方法:NSDateformatter stringFromDate在iOS 10.3.1模拟程序中返回错误的时间字符串,ios,objective-c,nsdate,nsdateformatter,Ios,Objective C,Nsdate,Nsdateformatter,我有一个将日期转换为字符串的方法: - (NSString*)getDateTimeBasedOnDeviceTimeFormat:(NSDate *)theDate{ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; NSDate *dateSource; NSString *dateStr; [dateFormatter setLocale:[NSLocale currentLo
- (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(这是正确的)
两个模拟器具有相同的语言和区域集。英语(美国)
mac日期时间设置:
我不知道为什么这种转换在iOS 10.3.1中出现错误
有人能给我指出一个正确的方向吗?关于我在测试10.3.1时遇到的问题,您有一个非常类似的问题。在调试dateFormatter时,我注意到模拟器上的时区总是返回为“GMT”。它似乎没有正确使用我的计算机设置 让timeZone=timeZone.current.缩写()//在iOS 10上生成“GMT”,在iOS 11上生成“PDT”
所以我在物理设备上进行了测试,一切都显示正常。我认为这至少是10.3.1模拟人生中的一个苹果模拟器错误造成的。希望这有帮助,我希望你有额外的设备测试 编辑这是一个总结问题的雷达: 我也注意到了这一点,但仅在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! ⚠️
<代码>导入基础
让formatterUTC=DateFormatter()
formatterUTC.locale=locale(标识符:“en_GB”)
formatterUTC.dateFormat=“yyyy-MM-dd'T'HH:MM:ss'Z'”
formatterUTC.timeZone=时区(缩写:“UTC”)
设d=formatterUTC.日期(起始日期:“2017-07-01T12:00:00Z”)
let formatter24=DateFormatter()
formatter24.locale=locale(标识符:“en_GB”)
formatter24.dateFormat=“HH:mm”
设s=formatter24.string(from:d!)//⚠️ iOS上的“12:00”
[dateFormatter setLocale:[NSLocale currentLocale]]代码>是冗余的;这是格式化程序的默认设置。为什么要更改时区?您是否尝试过不使用设置时区的行:
?我认为通过将时区设置为systemTimeZOne,应用程序将调整到设备时区,这样当用户更改时区时,约会的日期转换就不会出现问题。是的,我试过不用那条线,结果是一样的@Tawanicolas添加了时区设置的屏幕截图@rmaddyI相信这两个模拟器共享来自mac的相同时区设置。