用stringDate初始化NSDate,不带时区计算



我从web服务获得日期时间,该服务以UTC格式。现在我想把它分配给NSDate。以下是我所做的代码

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
NSDate *utcDate = [dateFormatter dateFromString:@"2015-08-18T23:00:00"];

,但它正在计算它的时区计算默认结果是2015-08-19 03:00:00 +0000。我如何用相同的日期和时间初始化NSDate。我想稍后在

上执行时区计算

edit/update:

Xcode 11•Swift 5.1:

let dateString = "2015-08-18T23:00:00"
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
if let dateFromString = formatter.date(from: dateString) {
    print(dateFromString)   // "2015-08-18 23:00:00 +0000"
}

默认分配的NSDateFormatter将使用当前区域设置(用户在Settings.app中设置的区域设置)。

必须在格式化程序上显式地设置合适的区域设置:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

该区域设置使用UTC上的公历,没有任何DST调整。

编辑:LeoDabus指出设置locale不会改变日期格式化程序的timezone。这必须显式地完成:

dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)

NSString *dateStr =[NSString stringWithFormat:@"%@",[dict valueForKey:@"utc_datetime"]];

NSString* input = dateStr;
NSString* format = @"dd MMM yyyy - HH:mm:ss'";
// Set up an NSDateFormatter for UTC time zone
NSDateFormatter* formatterUtc = [[NSDateFormatter alloc] init];
[formatterUtc setDateFormat:format];
[formatterUtc setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
// Cast the input string to NSDate
NSDate* utcDate = [formatterUtc dateFromString:input];
// Set up an NSDateFormatter for the device's local time zone
NSDateFormatter* formatterLocal = [[NSDateFormatter alloc] init];
[formatterLocal setDateFormat:format];
[formatterLocal setTimeZone:[NSTimeZone localTimeZone]];
// Create local NSDate with time zone difference
NSDate* localDate = [formatterUtc dateFromString:[formatterLocal stringFromDate:utcDate]];
NSLog(@"utc:   %@", utcDate);
NSLog(@"local: %@", localDate);
NSDateFormatter *format1q = [[NSDateFormatter alloc] init];
format1q.dateFormat = @"HH:mm";

NSString *StrDAte=[NSString stringWithFormat:@"%@",[format1q stringFromDate:utcDate]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"HH:mm";
NSDate *date = [dateFormatter dateFromString:StrDAte];
date = [date dateByAddingTimeInterval:-60];
dateFormatter.dateFormat = @"hh:mm a";
NSString *pmamDateString = [dateFormatter stringFromDate:date];

最新更新