我的视图控制器中有一个具有默认位置的UIDataPicker,当我的用户完成选择运行此代码的日期时:
NSString *dateString = [NSDateFormatter localizedStringFromDate:[self.dataPicker date]
dateStyle:NSDateFormatterLongStyle
timeStyle:NSDateFormatterNoStyle];
使用该代码,我可以按以下格式存储日期:
五月 31, 2016
稍后在我的代码中,我需要将此字符串转换为实际日期格式,为此我使用以下代码:
-(NSDate*)convertStringToDate:(NSString*)date{
NSString *dateString = date;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];
return [dateFormatter dateFromString:dateString];
}
但此代码返回一个空值。由于日期选择器是默认设置的,我的系统可以接收任何日期格式,但最终我希望它被转换为en_us格式。
我该如何解决这个问题?
不要将日期存储为字符串;将其存储为与某个参考日期的偏移量(以秒为单位)。
即:
uint64_t offset = (uint64_t)[[self.dataPicker date] timeIntervalSinceReferenceDate];
// store this 64-bit unsigned integer.
这占用的空间更少,并且与NSDate
对象之间的转换速度更快。
如果您愿意,您可以将偏移量保留为NSTimeInterval
(64 位浮点double
),但由于您不存储日期和时间,uint64_t
应该这样做......
使用此代码,
-(NSDate*)convertStringToDate:(NSString*)date{
NSString *dateString = date;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setDateFormat:@"MMM d, yyyy"];
return [dateFormatter dateFromString:dateString];
}
希望它有帮助
格式字符串取决于您使用的区域设置。从localizedStringFromDate
文档中:
返回给定日期的字符串表示形式,该日期的格式为 使用指定的日期和时间样式的当前区域设置。
此方法使用配置了当前默认值的日期格式化程序 设置。返回的字符串与配置和 使用了日期格式化程序,如以下示例所示:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.formatterBehavior = NSDateFormatterBehavior10_4;
formatter.dateStyle = dateStyle; formatter.timeStyle = timeStyle;
NSString *result = [formatter stringForObjectValue:date];
意味着,您应该执行下一步操作:
-(NSDate*)convertStringToDate:(NSString*)dateString {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.formatterBehavior = NSDateFormatterBehavior10_4;
dateFormatter.dateStyle = NSDateFormatterLongStyle;
dateFormatter.timeStyle = NSDateFormatterNoStyle;
return [dateFormatter dateFromString:dateString];
}