如何仅在12小时/ 24小时时间内从NSDate获取本地化时间由用户在设备上设置? 考虑日期是" 2015年6月3日3:00 PM" 如果设置了12小时格式,则应显示3PM(不包括分钟部分) 如果设置24小时格式,则应显示15(不包括分钟部分)
我尝试过在所有语言环境中都没有成功。例如,它适用于de_DE& fr_FR但是对于en_US,它总是返回3而没有AM / PM。
NSDateFormatter *dateFormatter = [NSDateFormatter new];
NSString *localeFormatString = [NSDateFormatter dateFormatFromTemplate:@"HH" options:0 locale:dateFormatter.locale];
dateFormatter.dateFormat = localeFormatString;
dateFormatter.timeZone = [NSTimeZone defaultTimeZone];
NSString * hour = [dateFormatter stringFromDate:date];
NSLog(@"%@",hour);
P.S。 如果我使用以下代码获得时间字符串(小时和分钟),它在区域设置以及12/24小时时间格式方面都非常有效。但是我想要只花几个小时,这是用12/24小时时间格式来实现的。
NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
timeFormatter.timeStyle = NSDateFormatterShortStyle;
timeFormatter.dateFormat = NSDateFormatterNoStyle;
timeFormatter.AMSymbol = @"a";
timeFormatter.PMSymbol = @"p";
timeFormatter.timeZone = timeZone;
return [timeFormatter stringFromDate:date];
答案 0 :(得分:0)
您将使用带有dd-MM-yyyy的NSDateFormatter,然后使用应用于格式化程序的NSTimeZone来调整本地时区。
NSDate *date = [[NSDate alloc] init];
NSLog(@"%@", date);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy hh:mm a"];
NSString *strDateString = [dateFormatter stringFromDate:date];
NSLog(@"%@", strDateString);
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
[dateFormatter setTimeZone:timeZone];
NSLog(@"adjusted for timezone: %@", [dateFormatter stringFromDate:date]);
答案 1 :(得分:0)
这有点hack,但是可以通过以下方式获得本地化的小时字符串,例如“下午5点”或“ 17”(取决于用户的语言环境设置)。
NSDate
; NSDateFormatter
使用日期样式NSDateFormatterNoStyle
和时间样式NSDateFormatterShortStyle
获得该日期的本地化字符串表示形式; :00
(如果需要)。代码:
// Construct an NSDate whose hour is set to the specified hour, with minutes and seconds 0.
// (The date of the object is irrelevant, we won't use it.)
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setHour:hour];
[components setMinute:0];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *topOfHour = [calendar dateFromComponents:components];
// Get a localized string representation of the time, e.g. "5:00 PM" or "17:00"
NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
timeFormatter.timeStyle = NSDateFormatterShortStyle;
timeFormatter.dateStyle = NSDateFormatterNoStyle;
NSString *hourString = [timeFormatter stringFromDate:topOfHour];
// Remove the ":00" from the string.
hourString = [hourString stringByReplacingOccurrencesOfString:@":00" withString:@""];
如果您只想从包含AM / PM指示符的时间字符串中删除“:00”部分,而以诸如“ 5 PM”或“ 17:00”之类的字符串结尾,则可以将其包装条件中的最后一行,例如:
if ([hourString containsString:timeFormatter.AMSymbol] || [hourString containsString:timeFormatter.PMSymbol])
{
hourString = [hourString stringByReplacingOccurrencesOfString:@":00" withString:@""];
}
由于此实现依赖于硬编码的“:00”,因此它可能不适用于某些语言环境,例如时分分钟不使用:
的语言环境,或者不计算从0开始的分钟数的语言环境,或者NSDateFormatterShortStyle
中还包括秒数的语言环境。