-3
+(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。设置语言环境标识符甚至时区并没有什么不同。提前致谢。

4

5 回答 5

4

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

虽然原则上格式字符串指定了固定格式,但默认情况下 NSDateFormatter 仍会考虑用户的偏好(包括区域设置)。使用格式字符串时必须考虑以下几点:

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

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

于 2013-05-13T12:25:14.687 回答
3

这里的问题是你如何得到字符串。你说你明白了

通过打印 returnDate 的描述

但是,根据文档,该-description方法是这样说的:

该表示仅对调试有用。

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

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

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

于 2013-05-14T05:34:05.647 回答
1

一次又一次:

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

于 2013-05-13T12:21:22.470 回答
0

你想要 24 小时格式做什么?格式用于转换NSDateNSString正确的字符串格式。只需在需要时进行反向转换

于 2013-05-13T12:20:04.543 回答
-2

12 小时制

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

24 小时制

[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
于 2013-05-13T12:20:24.053 回答