当用户的设备在 iOS 中设置为 24 小时制时,如何将包含“am/pm”的字符串转换为 NSDate?

Posted

技术标签:

【中文标题】当用户的设备在 iOS 中设置为 24 小时制时,如何将包含“am/pm”的字符串转换为 NSDate?【英文标题】:How do I convert a string that contains "am/pm" to an NSDate when the user's device is set to 24-Hour Time in iOS? 【发布时间】:2013-02-16 00:18:28 【问题描述】:

我需要将 NSString 转换为 NSDate,但以下代码仅在用户设备未设置为 24 小时制时才有效。

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];

NSString *aTime = @"2/11/2013 12:00:00 AM";
NSDate *aDate = [formatter dateFromString:aTime];

但是,当设备处于 24 小时制时,aDate 返回 null。有什么帮助吗?

【问题讨论】:

【参考方案1】:

我认为您可能会看到QA1480 描述的行为的副作用。 Apple 已经解决了它可能认为开发人员没有正确遵守语言环境的问题,方法是修改您规定的日期格式,除非您明确表示不这样做。

您可以通过添加:

formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
      /* and autorelease if not using ARC */

这基本上是说'我刚刚设置的日期格式是我想要的,请不要以任何方式修改它'。

【讨论】:

【参考方案2】:
    I think the following snippet might helps you out.

    NSString *dateString = @"09:34 AM";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"dd-MM-yyyy";
    NSString *stringFromDate = [dateFormatter stringFromDate:[NSDate date]];

    dateFormatter.dateFormat = @"dd-MM-yyyy hh:mm a";
    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

    NSDate *returnDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ %@", stringFromDate, dateString]];

【讨论】:

您确实应该包含某种描述。请阅读"How do I write a good answer?"【参考方案3】:

试试这个代码

NSString *string = @"2015-11-30 15:00:00";
NSDateFormatter* formatter =  [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
[formatter setTimeZone:[NSTimeZone localTimeZone]];
NSDate *date = [formatter dateFromString:string];

日期:2015-11-29 21:30:00 +0000

它是 UTC 格式,您可以根据需要进行修改!

【讨论】:

以上是关于当用户的设备在 iOS 中设置为 24 小时制时,如何将包含“am/pm”的字符串转换为 NSDate?的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS中设置为按钮选择的图像选择器图像

当内容可用在有效负载中设置为 true 时,是不是会在前台模式下调用 didReceiveRemoteNotification?

iOS 核心数据抽象类和子类

如何使用在我的客户的 iTunes Connect 中设置为 App Manager 角色的帐户将 iOS 构建上传到 App Store?

启动 24 小时计时器,当 24 小时结束时通知用户

[少数派报道] 帮您 24 小时监控站点设备API 的状态,咕咕数据是您的运维工具人