iOS:Objective-C:由于ipad时间显示12小时/24小时导致的输出问题
iOS:Objective-C:Output issue due to ipad time display 12Hour / 24Hour
在我的应用程序中,我使用一个函数来更改日期格式以将 / 替换为 - 以及日期格式。
当设备设置为 12 小时时,一切正常。但是当我将它设置为 24 小时时,它 returns 错误的值。
NSDate *newdate = [self convertDateSlashToDash:[obj valueForKey:@"TaskStartDateTime"]]);
//input date is : 6/6/2017 6:38:00 PM
-(NSDate *)convertDateSlashToDash:(NSString *)dateStr{
if ([dateStr isKindOfClass:[NSDate class]]) {
return (NSDate*)dateStr;
}
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//Set the AM and PM symbols
[dateFormatter setAMSymbol:@"AM"];
[dateFormatter setPMSymbol:@"PM"];
//Specify only 1 M for month, 1 d for day and 1 h for hour
[dateFormatter setDateFormat:@"M/d/yyyy h:mm:ss a"];
// in ms 1469077819000 without ms 1469077819 for 7/21/2016 5:10:19 AM
NSTimeInterval ti = [[dateFormatter dateFromString:dateStr] timeIntervalSince1970];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:ti];
NSDateFormatter *formatter= [[NSDateFormatter alloc] init];
// [formatter setLocale:[NSLocale currentLocale]];
[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss aa"];
NSString *dateString = [formatter stringFromDate:date];
NSDate *parsedDate = [formatter dateFromString:dateString];
return dateString;
}
//output of this is (24hrs): 1970-01-01 05:30:00AM
//output of this is (12hrs): 2017-06-06 06:38:00 PM
为什么不起作用?
请提出建议。
谢谢。
日期格式化程序指定的 12 小时制和 24 小时制不同。确保您使用的是正确的格式。我看到您使用 h
表示小时,最后使用 a
将格式化程序配置为 12 小时格式。对于 24 小时格式,您需要 H
或 HH
,具体取决于您的需要。您可以参考此link以更好地了解不同格式
请将此行添加到您的代码中以解决该问题
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
阅读更多:https://developer.apple.com/library/content/qa/qa1480/_index.html
在我的应用程序中,我使用一个函数来更改日期格式以将 / 替换为 - 以及日期格式。
当设备设置为 12 小时时,一切正常。但是当我将它设置为 24 小时时,它 returns 错误的值。
NSDate *newdate = [self convertDateSlashToDash:[obj valueForKey:@"TaskStartDateTime"]]);
//input date is : 6/6/2017 6:38:00 PM
-(NSDate *)convertDateSlashToDash:(NSString *)dateStr{
if ([dateStr isKindOfClass:[NSDate class]]) {
return (NSDate*)dateStr;
}
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//Set the AM and PM symbols
[dateFormatter setAMSymbol:@"AM"];
[dateFormatter setPMSymbol:@"PM"];
//Specify only 1 M for month, 1 d for day and 1 h for hour
[dateFormatter setDateFormat:@"M/d/yyyy h:mm:ss a"];
// in ms 1469077819000 without ms 1469077819 for 7/21/2016 5:10:19 AM
NSTimeInterval ti = [[dateFormatter dateFromString:dateStr] timeIntervalSince1970];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:ti];
NSDateFormatter *formatter= [[NSDateFormatter alloc] init];
// [formatter setLocale:[NSLocale currentLocale]];
[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss aa"];
NSString *dateString = [formatter stringFromDate:date];
NSDate *parsedDate = [formatter dateFromString:dateString];
return dateString;
}
//output of this is (24hrs): 1970-01-01 05:30:00AM
//output of this is (12hrs): 2017-06-06 06:38:00 PM
为什么不起作用? 请提出建议。
谢谢。
日期格式化程序指定的 12 小时制和 24 小时制不同。确保您使用的是正确的格式。我看到您使用 h
表示小时,最后使用 a
将格式化程序配置为 12 小时格式。对于 24 小时格式,您需要 H
或 HH
,具体取决于您的需要。您可以参考此link以更好地了解不同格式
请将此行添加到您的代码中以解决该问题
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
阅读更多:https://developer.apple.com/library/content/qa/qa1480/_index.html