来自设备的日期格式基于区域设置

时间:2013-05-10 11:33:21

标签: ios objective-c

据我所知,日期格式会因地区而异, 有没有办法从当前日期的设备本地设置中读取日期格式?

  1. 日期格式是“dd / MM / yyyy”还是“MM / dd / yyyy”。
  2. 时间格式为“h:mm a”或其他内容。
  3. 上午/下午的文字是“AM”或“PM”。
  4. 我买不起任何第三方图书馆,请告诉我这是否可以使用任何苹果课程。

    编辑:

    我不想设置任何格式,我只想根据区域设置从设备中检索它。

    说,在我的国家,日期格式是dd / MM / yyyy,在MM / dd / yyyy这个词的某些部分,我希望得到这种格式。

    感谢任何回答。

5 个答案:

答案 0 :(得分:11)

您正在寻找的方法是+[NSDateFormatter dateFormatFromTemplate:options:locale:]

此方法具体,用于将日期格式“本地化”为所需的区域设置。

例如,如果您想知道用户首选的年 - 月 - 日格式,请执行以下操作:

NSString *fmt = [NSDateFormatter dateFormatFromTemplate:@"dMMMMy" options:0 locale:[NSLocale currentLocale]];

或者如果你想知道他们喜欢的时间格式,你可以:

NSString *fmt = [NSDateFormatter dateFormatFromTemplate:@"jm" options:0 locale:[NSLocale currentLocale]];

当您需要实际格式字符串时,可以使用此方法。如果您只想根据预定义的样式(长,全,中,短)格式化日期,那么您可以使用常量,如其他几个答案所述。

答案 1 :(得分:8)

我想,这只是一个简单的修复。但是看到这个问题的一些很酷的答案,对此感到好奇。这是我的解决方案。

您可以使用NSDateFormatter,将样式设置为所需的格式

NSDateFormatterShortStyle   
NSDateFormatterMediumStyle
NSDateFormatterLongStyle

要了解更多信息,请查看documentation

以下是适合您的代码段。

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    NSString *dateformat = [dateFormatter dateFormat]; //M/d/yy
    NSString *amtext = [dateFormatter AMSymbol];       //AM
    NSString *pmtext = [dateFormatter PMSymbol];       //PM

    dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    NSString *timeformat = [dateFormatter dateFormat];   //h:mm a

它将使用用户的语言环境格式。希望能解决你的问题。

答案 2 :(得分:1)

您可以使用NSDateFormatter的dateStyle和timeStyle来实现此目的。

NSDateFormatter *dateFormatter = [NSDateFormatter new];

//Only set what you want to show, if you set both, both will be included in the converted string

//This would be like dd/MM/yyyy depending on your locale 
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
//This would be in hh:mm a
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];

//Assuming you have a date instance already in hand
NSString *dateString = [dateFormatter stringFromDate:date];

答案 3 :(得分:1)

  1. 日期格式取决于您使用 NSDateFormatter 格式化日期对象的方式。除非您格式化日期,否则日期没有格式。

    日期格式

    NSDateFormatterShortStyle   
    NSDateFormatterMediumStyle
    NSDateFormatterLongStyle  
    

    或使用您自己的格式

    [dateFormatter setDateFormat:@"hh:mm dd.MM.yyyy"];
    
  2. 使用相同的日期格式化程序格式化时间

     [dateFormatter setTimeStyle: NSDateFormatterShortStyle]    
    
  3. 您可以将AM / PM符号设置为您想要的

       [dateFormatter setAMSymbol:@"am"];  
       [dateFormatter setPMSymbol:@"pm"];
    

答案 4 :(得分:0)

您可以使用以下方式获取当前区域设置:

  NSLocale* currentLocale = [NSLocale currentLocale]; 

或者您可以使用以下代码自定义日期时间,例如:

NSDate * date = [m_DateTimePicker date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//dd for date, MMMM: month, yyyy:year hh: hour, mm: minute a: AM/PM
[dateFormatter setDateFormat:@"dd MMMM yyyy hh:mm a"];   
NSString *convertedString = [dateFormatter stringFromDate:date];