Iphone NSDate-更改时间组件
这可能是个愚蠢的问题,但我似乎找不到答案 我使用一个日期选择器允许用户输入日期,它还将时间设置为当前时间(我使用[NSDate date]初始化选择器) 有没有办法更改日期的时间成分?后来我计算了返回秒的时间间隔,由于时间的关系,我得到了一些奇怪的行为 此代码显示日期输入:Iphone NSDate-更改时间组件,iphone,objective-c,Iphone,Objective C,这可能是个愚蠢的问题,但我似乎找不到答案 我使用一个日期选择器允许用户输入日期,它还将时间设置为当前时间(我使用[NSDate date]初始化选择器) 有没有办法更改日期的时间成分?后来我计算了返回秒的时间间隔,由于时间的关系,我得到了一些奇怪的行为 此代码显示日期输入: @implementation AddEventViewController @synthesize backgroundColor, nameField, dateField, datePicker, eventName,
@implementation AddEventViewController
@synthesize backgroundColor, nameField, dateField, datePicker, eventName, eventDate;
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.view.backgroundColor = self.backgroundColor;
}
- (void)viewDidLoad
{
[super viewDidLoad];
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
CGSize size = self.view.bounds.size;
CGRect frame = CGRectMake(0, size.height - 216, 320, 216);
datePicker = [[UIDatePicker alloc] initWithFrame: frame];
datePicker.datePickerMode = UIDatePickerModeDate;
datePicker.hidden = YES;
datePicker.date = [NSDate date];
[datePicker addTarget:self
action:@selector(changeDateInLabel:)
forControlEvents:UIControlEventValueChanged];
[self.view addSubview: datePicker];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
-(IBAction)doneButton
{
if ((nameField.text != nil))
{
self.eventName = nameField.text;
self.eventDate = datePicker.date;
[[NSNotificationCenter defaultCenter]postNotificationName:@"EventAddDone" object:nil];
}
else
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Enter Event Name" message:nil delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil];
[alertView show];
[alertView release];
}
}
-(IBAction)cancelButton
{
[[NSNotificationCenter defaultCenter]postNotificationName:@"EventAddCancel" object:nil];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
- (void)changeDateInLabel:(id)sender
{
dateField.text = [dateFormatter stringFromDate:[datePicker date]];
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if(textField == dateField)
{
dateField.placeholder = @" ";
dateField.text = [dateFormatter stringFromDate:[datePicker date]];
datePicker.hidden = NO;
[nameField resignFirstResponder];
return NO;
}
return YES;
}
- (void)dealloc
{
self.backgroundColor = nil;
self.nameField = nil;
self.dateField = nil;
self.datePicker = nil;
self.eventName = nil;
self.eventDate = nil;
[dateFormatter release];
[super dealloc];
}
@end
我对记录日期的使用与以下类似:
NSTimeInterval age = [enteredDate timeIntervalSinceNow];
//do some math on the age variable to get number of days since the event occurred.
两种选择:
备选案文1:
int fromDate = [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSEraCalendarUnit
forDate:enteredDate];
int toDate = [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSEraCalendarUnit
forDate:[NSDate date]];
int days = toDate - fromDate;
备选案文2:
NSDate *dateA, *dateB;
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit
startDate:&dateA
interval:NULL
forDate:enteredDate];
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit
startDate:&dateB
interval:NULL
forDate:[NSDate date]];
//From here, apply the above method using components:fromDate:toDate:
//with dateA and dateB, which are set to the beginning of the days on
//which they lie.
两种选择:
备选案文1:
int fromDate = [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSEraCalendarUnit
forDate:enteredDate];
int toDate = [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSEraCalendarUnit
forDate:[NSDate date]];
int days = toDate - fromDate;
备选案文2:
NSDate *dateA, *dateB;
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit
startDate:&dateA
interval:NULL
forDate:enteredDate];
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit
startDate:&dateB
interval:NULL
forDate:[NSDate date]];
//From here, apply the above method using components:fromDate:toDate:
//with dateA and dateB, which are set to the beginning of the days on
//which they lie.
非常好,谢谢。我确实必须将NSInterval更改为NSTimeInterval,但在那之后它就工作了。哦,对不起,我是说NSInteger。NSDATE组件(这是使用组件创建的:fromDate:toDate:options:将组件存储为NSInteger。实际上,现在我的代码看起来好多了,但我仍然有一个问题。下面是一个日志条目,解释了我的意思:从2009-11-19 21:06:40-0500到2009-11-18 21:14:56-0500是0天,我希望忽略时间和把这两个日期分开一天。有什么想法吗?对于这种情况,我能想到的最好的办法是,如果它现在不起作用,使用
组件:fromDate:
对输入日期和当前日期进行比较,然后手动比较日期。非常好,谢谢。我确实必须将NSInterval更改为NSTimeInterval,但在那之后它就起作用了。哦,s哦,我是说NSInteger,NSDATE组件(这是使用组件创建的:fromDate:toDate:options:
将组件存储为NSInteger。实际上,现在我的代码看起来好多了,但我仍然有一个问题。下面是一个日志条目,解释了我的意思:从2009-11-19 21:06:40-0500到2009-11-18 21:14:56-0500是0天,我希望忽略时间和把这两个日期分开一天。有什么想法吗?对于这种情况,我能想到的最好的办法是,如果它现在不起作用,对输入日期和当前日期都使用组件:fromDate:
,然后手动比较日期。你应该将其更改为NSInteger,而不是将其更改为NSTimeInterval。我键入了d。谢谢,我看到了在我回答下面的问题后。你应该将其更改为NSInteger,而不是将其更改为NSTimeInterval。我输入了d。谢谢,我在回答下面的问题后看到了这一点。要确保你进行测试的一件事是,如果两个日期位于夏令时边界的两侧,它是否仍然返回相同的值。我已经在几个月内处理了这个问题场合。确保测试的一件事是,如果两个日期位于夏令时边界的两侧,它是否仍然返回相同的值。我已经多次处理过这个问题。