+(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。设置区域设置标识甚至时区都没有什么区别。提前谢谢。
答案 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"];