【问题标题】:How can I force an NSDate object to follow a specific format when 24-hour time is OFF, based on NSLocale?当 24 小时制关闭时,如何根据 NSLocale 强制 NSDate 对象遵循特定格式?
【发布时间】:2013-03-26 17:44:20
【问题描述】:

我正在尝试以我的移动应用的网络服务可以接受的格式获取 NSDate。该应用程序目前在老一代设备(iPhone 3GS、4 和 iOS 模拟器)上以 2013-03-26 17:27:55 格式输出,其中 12 小时时间以下午 5:27 的格式显示在状态栏中。这很好,这是我需要它用于服务器的格式。

我的问题出现在使用较新的设备(包括 iPhone 4S 和 iPhone 5)时,其中 12 小时时间以下午 5:27 的格式显示在状态栏中。在这些设备上,应用程序以2013-03-26 05:27:55 PM 的格式输出。问题总结如下:

Web service accepts yyyy-mm-dd HH:MM:ss
iPhone 4 and earlier yyyy-mm-dd HH:MM:ss (correct)
iPhone 4s and later yyyy-mm-dd HH:MM:ss AM/PM (incorrect and rejected)

那么,如何在用户的常规设置中关闭 24 小时制时,将 4S 及之后的输出日期设为 24 小时制?

编辑:

我正在使用下面的(NSDate *)getCurrentDate方法来尝试修改NSDate对象的格式。

NSDate *currentDateAndTime = [[NSDate alloc] init];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSLog(@"AM Symbol: %@", formatter.AMSymbol);
NSLog(@"PM Symbol: %@", formatter.PMSymbol);

NSString *dateString = [formatter stringFromDate:currentDateAndTime];
NSDate *date = [formatter dateFromString:dateString];

NSLog(@"currentDate: %@ currentDateString: %@", date, dateString);

return [formatter dateFromString:[formatter stringFromDate:currentDateAndTime]];

【问题讨论】:

  • 您目前如何在您的应用中将 NSDate 转换为 NSString?
  • 你试过使用 NSDateFormatter 吗?
  • 您能否添加代码以说明如何将NSDate 发送到网络服务?
  • 没有“NSDate 格式”之类的东西,它是一个代表时间戳的对象。任何字符串格式化都是通过其描述方法中的格式化代码完成的。这可能使用 NSDateFormatter ..
  • 请记住,NSDate 没有格式。 您无法更改其记录的默认格式。您所能做的就是将 NSDate 的内容“格式化”为您喜欢的格式的 NSString。

标签: iphone ios objective-c nsdate


【解决方案1】:

使用日期格式化程序

- (NSString *)dateStringForWebService:(NSDate *)date
{
    //If you call this often, you should cache the date formatter object
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"MM/dd/yy HH:mm:ss"];
    NSString * formattedDate = [dateFormatter stringFromDate:date];
    return formattedDate;
}

【讨论】:

  • 嘿,我已经试过了。我的getCurrentDate 方法替换了我在整个应用程序中对[NSDate date] 的调用。无论我做什么,我都无法摆脱上午或下午。在 NSDate 对象中。我在上面编辑了我的问题以包含 getCurrentDate 方法。
  • 您的代码返回一个 NSDate 对象 - 不是一个 NSString 对象。在 NSDate 对象中,日期由浮点数表示,即自 1970 年以来的秒数。它不代表 AM 或 PM。 如果您想要基于 NSDate 的特定格式的字符串,您必须使用 NSDateFormatter。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多