我正在开发一个显示开始日期和结束日期的应用程序,但我在文本字段上显示日期时遇到问题
这里一切正常:
但是当我在输出中转到 2012 年 12 月 30 日时,您可以读到 2012(硬编码),但在文本字段中它写的是 2013(格式化):
如果我尝试使用“全天”选项,也会发生同样的事情:
也会分享我的应用程序代码,让事情变得更容易
#import "StartEndEventVC.h"
#import "visitVC.h"
#import "Functions.h"
@interface StartEndEventVC ()
{
NSDate *date;
NSDateFormatter *df;
NSString *selectedCell;
}
@property (nonatomic, strong) Functions *funciones;
@end
@implementation StartEndEventVC
@synthesize funciones = _funciones;
@synthesize datePicker = _datePicker,
SwitchDate = _SwitchDate,
fecFinDateSE = _fecFinDateSE,
fecInicioDateSE = _fecInicioDateSE;
#pragma mark *** Common methods ***
- (void)viewDidLoad
{
[super viewDidLoad];
//Datepicker initial settings
self.datePicker.timeZone = [NSTimeZone localTimeZone];
self.datePicker.locale = [NSLocale currentLocale];
self.datePicker.calendar = [NSCalendar currentCalendar];
//Date format initial settings
df = [NSDateFormatter new];
[df setDateFormat:@"EE, dd MMM YYYY HH:mm a"];
[df setTimeZone:[NSTimeZone localTimeZone]];
//initial cell to interact with datepicker
selectedCell = @"startDate";
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(didBack:)];
}
-(void)estableceFechaCamposTexto{
self.fecInicioDateSE = [[NSDate alloc]init];
self.fecFinDateSE = [[NSDate alloc]init];
self.fecInicioDateSE = [NSDate date];
self.fecFinDateSE = [self.fecInicioDateSE dateByAddingTimeInterval:60*60];
self.startDateLabel.text = [df stringFromDate:self.fecInicioDateSE];
self.endDateLabel.text = [df stringFromDate:self.fecFinDateSE];
}
-(void)viewDidAppear:(BOOL)animated{
if ((self.fecInicioDateSE == nil) || (self.fecFinDateSE == nil)) [self estableceFechaCamposTexto];
self.startDateLabel.text = [df stringFromDate:self.fecInicioDateSE];
self.endDateLabel.text = [df stringFromDate:self.fecFinDateSE];
}
-(Functions *)funciones{
if (!_funciones) _funciones = [[Functions alloc]init];
return _funciones;
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"doneStartEnd"]) {
[segue.destinationViewController setFecInicioDateV: self.fecInicioDateSE];
[segue.destinationViewController setFecFinDateV: self.fecFinDateSE];
NSLog(@"fecha inicio StartEvent: %@", self.fecInicioDateSE);
NSLog(@"fecha fin StartEvent: %@", self.fecFinDateSE);
}
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row) {
case 0:
selectedCell = @"startDate";
self.datePicker.date = self.fecInicioDateSE;
break;
case 1:
selectedCell = @"endDate";
self.datePicker.date = self.fecFinDateSE;
default:
break;
}
}
#pragma mark -
#pragma mark *** Custom methods ***
-(void)comparaFechaInicio{
if ([self.fecInicioDateSE timeIntervalSinceDate:self.fecFinDateSE] >= 0) {
if (self.SwitchDate.on) self.fecFinDateSE = [self.fecInicioDateSE dateByAddingTimeInterval:60*60*24];
else
if(!(self.SwitchDate.on)) self.fecFinDateSE = [self.fecInicioDateSE dateByAddingTimeInterval:60*60];
}
self.startDateLabel.text = [df stringFromDate:self.fecInicioDateSE];
self.endDateLabel.text = [df stringFromDate:self.fecFinDateSE];
NSLog(@"Hardcoded date: %@", self.fecInicioDateSE);
NSLog(@"formatted date: %@", [df stringFromDate:self.fecFinDateSE]);
}
- (void) didBack:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark -
#pragma mark *** Button actions ***
-(IBAction)adjustDate:(id)sender{
if ([selectedCell isEqualToString:@"startDate"]){
self.fecInicioDateSE = [self.datePicker date];
[self comparaFechaInicio];
}
else
if ([selectedCell isEqualToString:@"endDate"]){
self.fecFinDateSE = [self.datePicker date];
self.endDateLabel.text = [df stringFromDate:self.datePicker.date];
}
}
- (IBAction)saveChanges:(id)sender {
[self comparaFechaInicio];
[self performSegueWithIdentifier:@"doneStartEnd" sender:self];
}
-(IBAction)changeDateType:(id)sender{
if (self.SwitchDate.on){
self.datePicker.datePickerMode = UIDatePickerModeDate;
[df setDateFormat:@"EE, dd MMM YYYY"];
}
else{
self.datePicker.datePickerMode = UIDatePickerModeDateAndTime;
[df setDateFormat: @"EE, dd MMM YYYY HH:mm a"];
}
[self comparaFechaInicio];
}
#pragma mark -
@end