Detect if time format is in 12hr or 24hr format

隐身守侯 提交于 2019-11-27 01:02:04

问题


Is there any way to detect if the current device of the app uses 12h our 24h format, so that I can use one NSDateFormatter for 12h and one for 24h depending on the users language/loaction setting? Just Like the UIDatePicker detects and shows the AM/PM picker if it is 12h format.


回答1:


I figured it out, its pretty easy. I just added this code to 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"));

And it perfectly returns YES or NO depending on the locale.




回答2:


And here is a Swift 3.0 updated version

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)
}



回答3:


this is swift solution that worked for me, those two above did not.

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
   }




回答4:


Here is the Swift version:

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)
}



回答5:


Objective C category 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


来源:https://stackoverflow.com/questions/7448360/detect-if-time-format-is-in-12hr-or-24hr-format

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!