NSDateFormatterLongStyle字符串的NSDate
问题描述:
我在我的viewController默认位置,UIDataPicker当我的用户完成选择日期运行此代码:NSDateFormatterLongStyle字符串的NSDate
NSString *dateString = [NSDateFormatter localizedStringFromDate:[self.dataPicker date]
dateStyle:NSDateFormatterLongStyle
timeStyle:NSDateFormatterNoStyle];
与该代码我可以存储在以下格式的日期:
2016年5月31日
在我的代码之后,我需要这个字符串转换成真正的日期格式,为了这个,我用鳕鱼e如下:
-(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
应该做的......
答
格式化字符串取决于您使用的语言环境。从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];
}
答
使用此代码,
-(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];
}
希望它有帮助
请参见本教程:HTTPS: //iosdevcenters.blogspot.com/2016/03/nsdateformatter-in-swift.html –
'2016年5月31日'vs'MM/dd/yyyy'您是否看到相同的格式?格式“MM/dd/yyyy”与字符串格式不匹配(2016年5月31日)。 – Larme
@Larme,我明白了...现在让我们将设备的语言更改为法语,格式将与2016年5月31日不同,我认为我需要将日期转换为语言环境... – Lacrifilm