将NSString转换为NSDate以将日期添加到动态日期

时间:2013-07-23 11:30:50

标签: iphone ios nsdate nsdatecomponents

我从数据库获得了一个NSString(我有一个日期),我需要添加几天假设10月12月15/45/60天,我该怎么办。

当我尝试使用这段代码时:

NSString *expiryDateStr = [NSString stringWithFormat:@"%@",[[assets valueForKeyPath:@"assetrewards.expirydate"] objectAtIndex:0]];
        NSLog(@" date %@",expiryDateStr);

        //DATE FORMATTER
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"dd/MM/yyyy"];
        NSDate *_date = [dateFormat dateFromString:expiryDateStr];
        [dateFormat setDateFormat:[NSString stringWithFormat:@"dd MMM yyyy HH:mm"]];
        [dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:3600*5]];
        NSLog(@"date format %@",dateFormat);
        NSLog(@"Date: %@", _date);

我得到这样的输出:

date 07/10/2013
date format <NSDateFormatter: 0x9f9d4a0>
Date: 2013-10-06 18:30:00 +0000

日期变了,我不知道我哪里出错了,如果这是正确的日期,如何将日期添加到日期。

5 个答案:

答案 0 :(得分:2)

NSString *expiryDateStr = @"07/10/2013";
NSLog(@" date %@",expiryDateStr);
expiryDateStr=[expiryDateStr stringByAppendingString:@" 00:00:00 +000"];
//DATE FORMATTER
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM/yyyy HH:mm:ss Z"];
NSDate *_date = [dateFormat dateFromString:expiryDateStr];
[dateFormat setDateFormat:[NSString stringWithFormat:@"dd MMM yyyy HH:mm"]];
[dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit |NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit fromDate:_date];
NSInteger day = [components day]+1; // U can add as per your requirement


[components setDay:day];
NSDate *NextDate = [[NSCalendar currentCalendar] dateFromComponents:components];

NSLog(@"Next Date: %@", NextDate);

答案 1 :(得分:0)

你可以和以下几天见面......

设置如下所示的时区......

  [dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];


    NSDate *dateAftertwenty = [NSDate dateWithTimeInterval:10*24*60*60 sinceDate:date]; //TimeInterval is of 10 days....you can set any number of days.24 is hours, 60 is minutes and 60 is seconds at last..

让我知道它的工作与否!!!

快乐编码!!!!

答案 2 :(得分:0)

<强>更新

首先setTimeZonelocalTimeZone如下...

[formatter setLocale:[NSLocale currentLocale]];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

使用我的波纹管方法将该字符串日期转换为NSDate ..

-(NSDate *)convertStringToDate:(NSString *) date dateFormat:(NSString*)dateFormat{
    NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
    [formatter setLocale:[NSLocale currentLocale]];
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSDate *nowDate = [formatter setDateFormat:dateFormat];// set format here which format in string date
    date = [date stringByReplacingOccurrencesOfString:@"+0000" withString:@""];
    nowDate = [formatter dateFromString:date];
    // NSLog(@"date============================>>>>>>>>>>>>>>> : %@", nowDate);
    return nowDate;
}

并像下面那样使用它。

NSDate *startDate = [self convertStringToDate:@"07/10/2013" dateFormate:@"dd/MM/yyyy"]; 

以上设置日期格式,其格式在字符串

中定义

答案 3 :(得分:0)

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM/yyyy"];
NSDate *_date = [dateFormat dateFromString:expiryDateStr];

非常好 - 没问题。 “问题”是

NSLog(@"Date: %@", _date);

将日期显示为UTC / GMT,因此(在印度)的值比“真实”日期早五个半小时。这不是问题 - 当您将日期格式化为不同的字符串格式(使用日期格式化程序的第二个版本)时,它将正确显示(只要您不设置该版本的时区,如果您没有不要把它设置为第一个。

要增加日期,通常最好使用NSDateComponents(或多或少如Paras所示)与简单地添加24小时的增量,以防日期范围内出现任何类型的“夏令时”转换。

答案 4 :(得分:0)

我修改了你的代码,我相信这就是你想要的:

NSString *expiryDateStr = @"07/10/2013";
NSLog(@" date %@",expiryDateStr);

//DATE FORMATTER
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM/yyyy"];

[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSDate *_date = [dateFormat dateFromString:expiryDateStr];
NSLog(@"date format %@",dateFormat);
NSLog(@"Date: %@", _date);

<强>输出:
 日期07/10/2013
日期格式
日期:2013-10-07 00:00:00 +0000

现在更改了代码中的时区:

NSString *expiryDateStr = @"07/10/2013";
NSLog(@" date %@",expiryDateStr);

//DATE FORMATTER
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM/yyyy"];

[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT+5:30"]];
NSDate *_date = [dateFormat dateFromString:expiryDateStr];
NSLog(@"date format %@",dateFormat);
NSLog(@"Date: %@", _date);

输出是:

日期07/10/2013
日期格式
日期:2013-10-06 18:30:00 +0000

这是你得到的输出。这是因为您正在使用计算机的时区。

编辑(要添加的天数用days整数表示):

NSString *expiryDateStr = @"07/10/2013";
NSLog(@" date %@",expiryDateStr);

//DATE FORMATTER
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM/yyyy"];


[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSDate *_date = [dateFormat dateFromString:expiryDateStr];
NSInteger days = 30;
_date = [_date dateByAddingTimeInterval:(60*60*24*days)];

NSLog(@"date format %@",dateFormat);
NSLog(@"Date: %@", _date);

编辑代码的输出:

日期07/10/2013
日期格式
日期:2013-11-06 00:00:00 +0000