即使设置了区域设置标识符en_GB,日期格式也会返回12小时格式

时间:2013-05-13 12:13:46

标签: iphone ios objective-c nsdateformatter

+(NSDate *)DateServerFormatFromString:(NSString *)date
{
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init] ;
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
[dateFormatter setLocale:locale];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
NSDate* returnDate = [dateFormatter dateFromString:date];
return returnDate;

}

该函数以“2013-05-09 08:06:04 AM +0000”格式返回日期。但我希望它以24小时格式。传递给此函数的日期与setDateFormat方法中给出的格式完全相同。 设备的区域格式设置为“英国”,时间格式设置为“12小时格式”。这不应该改变。当设备中的时间格式设置为24小时格式时,该功能可以正常工作。代码有什么问题。我在OS 5.1.1中使用iPad 1。设置区域设置标识甚至时区都没有什么区别。提前谢谢。

5 个答案:

答案 0 :(得分:4)

这不一定是答案,只是在Apple文档(here)中找到的解释:

  

虽然原则上格式字符串指定了固定格式,但是   默认NSDateFormatter仍然采用用户的首选项(包括   考虑区域设置)。您必须考虑以下事项   使用格式字符串时的点数:

     
      
  • NSDateFormatter将您解析的字符串中的数字视为它们   在用户选择的日历中。例如,如果用户选择   解析2010年的佛教日历会产生一个NSDate对象   公元1467年的格里高利历。 (有关不同的更多信息   日历系统以及如何使用它们,请参阅日期和时间编程   指南。)

  •   
  • 在iOS中,用户可以覆盖默认的AM / PM而不是24小时   时间设定。这可能导致NSDateFormatter重写格式   你设置的字符串。

  •   

答案 1 :(得分:2)

这里的问题是你如何获得字符串。你说你懂了它

  

打印returnDate的描述

但是,根据the documentation-description方法说明了这一点:

  

该表示仅对调试有用。

     

有许多选项可以获取日期的格式化字符串,包括:日期格式化程序(请参阅NSDateFormatter和数据格式指南),以及NSDate方法descriptionWithLocale:,dateWithCalendarFormat:timeZone:和descriptionWithCalendarFormat:timeZone:locale:< / p>

这意味着-description返回的值是否符合任何12小时或24小时的时间设置。它只是一个调试版本。

如果您想将日期表示为人类可读的字符串,则必须使用NSDateFormatter

答案 2 :(得分:1)

一次又一次:

NSLog()约会了吗?记录日期始终以标准化标准格式完成。如果要记录格式化日期,请记录格式化程序的结果,而不是直接记录日期。

答案 3 :(得分:0)

你想要什么样的24小​​时格式?格式用于将NSDate转换为NSString,格式正确。只需在需要时进行反向转换

答案 4 :(得分:-2)

12小时格式

[dateFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss"];

24小时格式

[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];