我从数据库获得了一个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
日期变了,我不知道我哪里出错了,如果这是正确的日期,如何将日期添加到日期。
答案 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)
<强>更新强>
首先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"];
以上设置日期格式,其格式在字符串
中定义答案 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