当用户的设备在 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?的主要内容,如果未能解决你的问题,请参考以下文章
当内容可用在有效负载中设置为 true 时,是不是会在前台模式下调用 didReceiveRemoteNotification?
如何使用在我的客户的 iTunes Connect 中设置为 App Manager 角色的帐户将 iOS 构建上传到 App Store?