如何在当前时间上添加时间

10

我对这个问题感到相当困惑。

我想获取当前时间,然后根据条件添加所需的时间到当前时间。 例如:

current time  = 06:47:10 
//or should i hv to change this format to "2011-03-26 06:47:10  GMT"

 if(a= 1 and b= min ) 
  { //add 1 min to
  current time 
  } 
  else if(a= 1 and b= hour) 
  { //add 1
   hour to current time 
  } 
 else if(a= 1 and b=week )  
 { //add 1
 week to current time  
 }

只需要将上述条件的输出添加到当前时间即可。

请指导我如何实现。

谢谢。


请查看此答案https://dev59.com/B2gu5IYBdhLWcg3w3ava#29542106 - Waseem Shah
4个回答

19
你的意思是指当前时间,也就是现在吗?
如果是的话,这个代码可以帮你实现:
NSDate *now = [NSDate date]; // Grab current time
NSDate *newDate = [now addTimeInterval:XXX] // Add XXX seconds to *now

XXX表示时间(以秒为单位)。


谢谢,Rog。是的,我的意思是当前时间。但是如果我想使用NSDate来管理分钟、小时、周和月份,我该怎么做呢?如果我想要添加1分钟、1小时或1个月,应该如何添加到当前时间中?谢谢。 - Shishir.bobby
#define kOneDay 86400 这就是所有与夏令时相关的故障来源。每年都会有一天只有82800秒,还有一天有90000秒。有时候也会出现一天有86401秒。 - Matthias Bauch
@fluchtpunkt 很好的观点!你通常会如何以一种通用的方式处理这些异常情况? - Rog
@Rog NSDateComponents。请看我的回答。 - Matthias Bauch
addTimeInterval 已不推荐使用。NSDate *now = [NSDate date]; NSDate newDate = [now dateByAddingTimeInterval:6060];//增加1小时时间 - Sudhakar

14

不应该使用#define kOneDay 86400

在具有夏令时的时区中,每年有一天只有82800秒,还有一天有90000秒。并且有时会出现一天有86401秒的情况。(但我认为闰秒也被NSDateComponents忽略了。)

如果您想正确地执行此操作,则应使用NSDateComponents。

要添加一天,可以像这样使用:

NSDateComponents *offset = [[[NSDateComponents alloc] init] autorelease];
[offset setDay:1];
NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:offset toDate:date options:0];

使用 setDay:1 而不是 setHour:24 是很重要的。


要加上两周三小时,你可以使用以下代码:

NSDateComponents *offset = [[[NSDateComponents alloc] init] autorelease];
[offset setWeek:2];
[offset setHour:3];
NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:offset toDate:date options:0];

你应该掌握这个思路。从最大的变化单位开始,逐渐细化到最小的单位。

是的,相对于addTimeInterval:来说,它需要更多的工作量,但是如果你在意天数、周数和月份,addTimeInterval:hours*60*60是不正确的。


1
'addTimeInterval:' is deprecated

你现在可以使用它

mydate=[NSDate date];    
mydate = [mydate dateByAddingTimeInterval:XXX]; //XXX in seconds

0

Swift 版本:

let now = NSDate().timeIntervalSince1970 // current time
let timeAfterXInterval = NSDate().dateByAddingTimeInterval(XXX).timeIntervalSince1970 // time after x sec

XXX 是以秒为单位的时间


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接