有没有什么方法可以检测到应用的当前设备是否使用12小时我们的24h格式,这样我可以使用一个NSDateFormatter 12小时和一个24小时,具体取决于用户的语言/放置设置?就像UIDatePicker检测并显示AM/PM选取器是否为12h格式一样。检测时间格式是否为12小时或24小时格式
回答
我觉得它很容易。我只是说此代码viewDidLoad
:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);
[formatter release];
NSLog(@"%@\n",(is24h ? @"YES" : @"NO"));
而且它完美地返回YES
或NO
取决于语言环境。
谢谢你的回答。它帮助我很多。 – Gypsa
这只适用于本地日历使用与手机相同的格式,但在iOS上,您可以专门设置时间格式,使其与本地日历中使用的格式不同。 – yoeriboven
这里是斯威夫特版本:
func using12hClockFormat() -> Bool {
let formatter = NSDateFormatter()
formatter.locale = NSLocale.currentLocale()
formatter.dateStyle = NSDateFormatterStyle.NoStyle
formatter.timeStyle = NSDateFormatterStyle.ShortStyle
let dateString = formatter.stringFromDate(NSDate())
let amRange = dateString.rangeOfString(formatter.AMSymbol)
let pmRange = dateString.rangeOfString(formatter.PMSymbol)
return !(pmRange == nil && amRange == nil)
}
您正在使用三元运算符作为NOT,这使得它更难以阅读。返回的行应该是这个'return!(pmRange == nil && amRange == nil)' – EmilioPelaez
啊,当然,谢谢:)我已经编辑了它.. – Wiingaard
这里是一个雨燕3.0更新版本
func using12hClockFormat() -> Bool {
let formatter = DateFormatter()
formatter.locale = Locale.current
formatter.dateStyle = .none
formatter.timeStyle = .short
let dateString = formatter.string(from: Date())
let amRange = dateString.range(of: formatter.amSymbol)
let pmRange = dateString.range(of: formatter.pmSymbol)
return !(pmRange == nil && amRange == nil)
}
这是为我工作迅速解决,以上这两个没有。
let dateString : String = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current)!
if(dateString.contains("a")){
// 12 h format
return true
}else{
// 24 h format
return false
}
最正确的答案我猜 –
目标C类NSDate+Extensions
:
@import Foundation;
@interface NSDate (Extensions)
- (NSString *)getTimeString;
@end
#import "NSDate+Extensions.h"
@implementation NSDate (Extensions)
- (NSString *)getTimeString
{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
if ([self isTwelveHourDateFormat]) {
[formatter setDateFormat:@"hh:mm\ndd MMM"];
}
else {
[formatter setDateFormat:@"HH:mm\ndd MMM"];
}
return [formatter stringFromDate:self];
}
- (BOOL)isTwelveHourDateFormat
{
NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
return [dateFormat containsString:@"a"];
}
@end
- 1. 检测iPhone是否在12小时或24小时模式下显示时间?
- 2. 使用javascript转换24小时格式为12小时格式
- 3. 24小时格式为12小时格式
- 4. 将12小时时间格式转换为24小时整数?
- 5. 正则表达式12小时和24小时时间格式
- 6. 12小时或24小时格式的NSDateComponent中的小时?
- 7. 24小时时间格式
- 8. 如何将24小时格式TimeSpan转换为12小时格式TimeSpan?表示为24小时格式
- 9. 转换12小时格式到24小时格式在SQL Server
- 10. 如何检测当前语言环境是否使用12小时或24小时时间格式?
- 11. 从24小时更改JS时间格式12小时
- 12. jqm-calendar时间格式(默认24小时...宁愿12小时)
- 13. Flex中的时间格式“24小时制”和“12小时制”
- 14. 转换日期,时间在12小时格式24小时格式的iOS
- 15. 从12小时格式到24小时格式的时间转换
- 16. php 12小时格式到24小时格式化时间转换
- 17. 转换24小时格式小时为12个小时制时间在PHP
- 18. 为12小时时间格式
- 19. SQL24小时格式时间至12小时格式
- 20. hh:mm aa(12小时格式)转换为HH:mm(24小时制)
- 21. 新日期()12/24小时格式JavaScript?
- 22. 如何在Postgres中将12小时时间戳格式转换为24小时时间戳格式?
- 23. 转换为时间12小时格式从包含24小时格式时间的字符串
- 24. 将12小时日期格式转换为24小时格式,反之亦然?
- 25. 如何将12小时格式转换为水壶中的24小时格式
- 26. 转换24小时日期格式为12小时格式在R
- 27. Android日期时间格式错误时间显示12小时和24小时
- 28. 将12小时时间格式转换为24小时,如mysql中所示
- 29. 在Ruby中将12小时时间转换为24小时格式
- 30. 我是否要检查手机时间格式是否设置为24小时?
已经回答[这里](http://stackoverflow.com/q/1929958/154803) – progrmr
@progrmr那绝对是一个确定是否设置24小时制的好方案,但取决于日期格式化程序的行为。 OP希望这些信息使用日期格式化程序格式化字符串,以便解决方案包括添加类别类别,创建日期格式化程序,将日期转换为字符串,为AM/PM符号搜索字符串两次,然后将代码分支到格式使用12小时或24小时格式,当它已经为你做。 – Joe
@Joe我知道,但有时你需要知道其他原因,比如把“AM”放在一个单独的不同字体的UILabel中,OP不清楚他为什么想知道。 – progrmr