我想得到一个像“10:00 PM”这样的时间字符串,我使用NSDateFormatterShortStyle来实现这一点。 但是,当系统设置为使用24小时格式时,我得到的是“22:00”。
此外,我想获得一个本地化的时间字符串。例如,在中文中,我希望得到“下午10:00”而不是“晚上10:00”。所以我必须使用[NSLocale currentLocale],并且不能使用en_US_POSIX语言环境。
请帮我获取本地化的12小时格式字符串。
我不仅需要小时部分,还需要上午/下午部分。此外,am / pm部分可能位于小时/分钟部分之前或小时/分钟部分之后,具体取决于地区。就像系统显示时间一样。 当系统设置为使用12小时格式时,它很简单。但是当系统使用24小时格式时,我无法获得本地化的12小时格式时间字符串。
答案 0 :(得分:14)
这应该有效:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"hh:mm a" options:0 locale:[NSLocale currentLocale]]];
NSString *theTime = [dateFormatter stringFromDate:[NSDate date]];
这应该会为您提供一个日期格式化程序,它将以12小时格式提供日期。小写hh表示小时1-12格式。有关格式字符串的详细信息,请参阅Date Format Patterns的Unicode技术标准#35部分。
不幸的是,iOS会根据用户的24小时格式首选项设置重写格式字符串。我无法使用Cocoa的日期格式找到该设置。由于24小时格式将删除am / pm指定,解析结果字符串以转换大于12的小时将导致不明确的时间字符串。因此,我能看到的唯一剩余选项是尊重用户24小时偏好设置或使用其他本地化代码。您可以自己编写,也可以找一个开源替换。
答案 1 :(得分:0)
Swift 3.0
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "hh:mm a", options: 0, locale: NSLocale.current)
var theTime: String = dateFormatter.string(from: Date())
答案 2 :(得分:-3)
NSInteger originalHour = hour;
BOOL isPm = YES;
if (hour >= 12) {
if (hour > 12)
hour -= 12;
}
else {
isPm = NO;
}
if (hour == 0)
hour = 12;