0

我从数据库中得到一个 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

日期正在更改,我不知道我哪里出错了,如果那是正确的日期,如何将日期添加到日期中。

4

5 回答 5

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);
于 2013-07-23T12:55:06.377 回答
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..

让我知道它是否有效!

快乐编码!!!!

于 2013-07-23T11:34:34.413 回答
0

更新:

首先 setTimeZone喜欢localTimeZone下面..

[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"]; 

以上设置的日期格式在字符串中定义

于 2013-07-23T11:36:00.487 回答
0
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM/yyyy"];
NSDate *_date = [dateFormat dateFromString:expiryDateStr];

完全没问题——没问题。“问题”在于

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

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

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

于 2013-07-23T12:29:42.353 回答
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

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

编辑(要添加的天数由daysinteger 表示):

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

于 2013-07-23T12:50:28.900 回答