不使用NSDateFormatter将Date转换为String

时间:2012-10-04 11:05:57

标签: objective-c iphone nsstring nsdate

如何在不使用NSDate的情况下将NSString转换为NSDateFormatter

为了您的参考,我的代码如下,我将它用于我的提醒应用程序。

非常感谢你。

 NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

// Get the current date
NSDate *pickerDate = [self->dp date];



// Break the date up into components
NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit )
                                               fromDate:pickerDate];
NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                               fromDate:pickerDate];

// Set up the fire time
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];
[dateComps setHour:[timeComponents hour]];
// Notification will fire in one minute
[dateComps setMinute:[timeComponents minute]];
[dateComps setSecond:[timeComponents second]];
NSDate *itemDate = [calendar dateFromComponents:dateComps];
[dateComps release];

5 个答案:

答案 0 :(得分:4)

根据你的问题,你可以通过这种方式得到它 -

NSString *stringDate = [NSString stringWithFormat:@"%@",pickerDate];
NSLog(@"%@",stringDate);

NSString *stringDate = [pickerDate description];
NSLog(@"%@", stringDate);

您还可以使用NSString获取NSDateFormatter为什么您会害怕使用它?

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];

NSString *stringDate = [dateFormatter stringFromDate:pickerDate];  
NSLog(@"%@", stringDate);

答案 1 :(得分:3)

伙计们,请大声读出documentation for NSDate,然后大声喊叫!

  

描述

     

返回接收者的字符串表示。

     

- (NSString *)description

     

返回值

     

接收者的字符串表示。

     

讨论

     

不保证代表性保持不变   不同版本的操作系统。要格式化日期,您   应该使用日期格式化程序对象(请参阅NSDateFormatter和   数据格式指南)

还应该理解,当您执行[NSString stringWithFormat:@"%@", something]时,会发生%@格式后面的代码调用description的{​​{1}}方法。对于NSString对象,something方法被定义为可靠地返回字符串值,但是对于所有其他Cocoa类description仅用于诊断用途。

NSDateFormatter的另一个替代方案(除了向后的NSCalendar方案)是自己破解日期 - 不是那么困难,真的,至少是一个有趣的练习。

[如果你想尝试自己破解日期,请使用description,它返回一个NSTimeInterval对象(实际上只是一个类型timeIntervalSinceReferenceDate),表示自2001年1月1日以来的秒数(之前的日期为负数) )。该值为UTC,因此如果您想要本地时间,则添加/减去任何时区偏移,然后开始使用模运算。您可以轻松地将其设置为毫秒,秒,分钟和小时,以及“自2001年1月1日以来的天数”值。从那里转换到日/月/年需要思考,但并不是非常困难,特别是如果你把自己限制在1900年以后的日期。]

答案 2 :(得分:1)

我正在使用此功能并仅以字符串保存到数据库中。

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss z"];

NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];  
NSLog(@"Current time date:%@", dateString);

答案 3 :(得分:0)

根据你的问题,你可以通过这种方式得到它 -

NSString *stringDate = [NSString stringWithFormat:@"%@",pickerDate];
NSLog(@"%@",stringDate);

NSString *stringDate = [pickerDate description];
NSLog(@"%@", stringDate);

答案 4 :(得分:0)

NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss z"];
NSString *dateString = [dateFormatter stringFromDate:date];
NSLog(@"Current time date:%@", dateString);