NSDateFormatterLongStyle string to NSDate



我的视图控制器中有一个具有默认位置的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];
}

最新更新