5

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

  1. 日期格式是“dd/MM/yyyy”还是“MM/dd/yyyy”。
  2. 时间格式为“h:mm a”或其他格式。
  3. AM/PM 文本是“AM”或“PM”。

我买不起任何第三方库,请告诉我这是否可以使用任何苹果类来完成。

编辑:

我不想设置任何格式,我只想根据语言环境从设备中检索它。

比如说,在我的国家,日期格式是 dd/MM/yyyy 在它的 MM/dd/yyyy 这个词的某些部分,我想获得这种格式。

任何答案表示赞赏。

4

5 回答 5

13

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

此方法专门用于将日期格式“本地化”为所需的语言环境。

例如,如果你想知道用户喜欢的年月日格式,你可以这样做:

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

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

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

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

于 2013-05-13T05:10:41.523 回答
9

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

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

NSDateFormatterShortStyle   
NSDateFormatterMediumStyle
NSDateFormatterLongStyle

想知道更多请看一下文档

下面是给你的片段。

    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

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

于 2013-05-13T12:19:13.447 回答
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"];
    
于 2013-05-10T12:01:09.870 回答
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];
于 2013-05-10T11:51:15.553 回答
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];
于 2013-05-10T12:16:58.497 回答