ios - 奇怪的将输出从 NSString 转换为 NSDate

标签 ios objective-c nsdate

我在尝试从 NSString 输出 NSDate 对象时得到了奇怪的结果。 我的 NSString 是:1976-06-11 我的转换方法是:

-(NSDate*)dateFromString:(NSString *)dateString{

    // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy-MM-dd"];
    NSDate *date = [dateFormat dateFromString:dateString];
    return date;
}

但它输出 1976-06-10 21:00:00 +0000

怎么会这样? 1 天内的差异。

最佳答案

您有 UTC 格式的日期。使用此代码将您的日期转换为本地时间:

NSTimeInterval seconds; // assume this exists
NSDate *ts_utc = [NSDate dateWithTimeIntervalSince1970:seconds];

NSDateFormatter *utcFormatter = [[NSDateFormatter alloc] init];
utcFormatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
utcFormatter.dateFormat = @"yyyy.MM.dd G 'at' HH:mm:ss zzz";

NSDateFormatter *localFormatter = [[NSDateFormatter alloc] init];
localFormatter.timeZone = [NSTimeZone timeZoneWithName:@"EST"];
localFormatter.dateFormat = @"yyyy.MM.dd G 'at' HH:mm:ss zzz";

NSString *utcDateString = [utcFormatter stringFromDate:ts_utc];
NSString *LocalDateString = [localFormatter stringFromDate:ts_utc];

或者您可以使用 [NSTimeZone defaultTimeZone] 来防止时区名称的硬编码字符串。如果没有设置默认时区,该方法返回系统时区。

关于ios - 奇怪的将输出从 NSString 转换为 NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716735/

相关文章:

ios - 在 Swift 中,DateFormatter 对于没有时间的特定日期字符串返回 nil

ios - 在 iOS 中的自定义类中获取 SKView 大小

objective-c - 了解启动图像 iPhone/iPad

ios - NSMutableOrderedSet 到 NSMutableArray

ios - 没有时区信息的 NSDate 和字符串

ios - GMT 日期字符串转换为 UTC 日期

ios - 如何获取第一个和第二个对象

ios - 为什么我会看到有关使用 LLVM 的 -falign-loops 的编译错误?

ios - Objective-C - iPhone : different DetailViewControllers for TableView?

objective-c - Objective-C程序中的全局变量