如何从字符串格式化日期时间

时间:2012-11-27 07:48:29

标签: objective-c ios

我有一个像这样的字符串“2012 12 12 12:12”,如何格式化为日期?

我试试这个但不能正常工作

-(NSDate *)stringToDate:(NSString *)date
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone localTimeZone];

    [formatter setTimeZone:timeZone];
    [formatter setDateFormat : @"yyyy MM dd HH:mm"];

    NSString *stringTime = date;

    NSDate *dateTime = [formatter dateFromString:stringTime];
    [formatter release];
    return dateTime;
}

更新:当我更改格式化程序的位置时,它也无法工作:

NSLog(@"%@", stringToDate(@"2012 12 12 12:12"));

它输出“null”,但它适用于字符串格式,如“2012-12-12 12:12”

3 个答案:

答案 0 :(得分:3)

改变这一点,

[formatter setDateFormat : @"yyyy MM dd HH:mm"];
[formatter release];
NSString *stringTime = date;
NSDate *dateTime = [formatter dateFromString:stringTime];

[formatter setDateFormat : @"yyyy MM dd HH:mm"];
NSString *stringTime = date;
NSDate *dateTime = [formatter dateFromString:stringTime];
[formatter release];

在完成从字符串到日期转换使用格式化程序之前,请不要发布格式化程序。在您的代码中,您将在转换之前释放它。

<强>更新

您需要将其用作

NSLog(@"%@", [self stringToDate:@"2012 12 12 12:12"]);

您无法在objective-c中使用stringToDate(@"2012 12 12 12:12")。这里的等价是[self stringToDate:@"2012 12 12 12:12"]

答案 1 :(得分:2)

您可以使用:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];

而不是这两行:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
...
[formatter release];

如果您使用ARC,那么内存管理没有任何问题。

编辑:但请仔细阅读一些内存管理规则和指南,这对于在cococa工作的每个人来说都是必须的。

答案 2 :(得分:1)

您在使用前发布NSDateFormatter

使用此代码: -

-(NSDate *)stringToDate:(NSString *)date
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone localTimeZone];

    [formatter setTimeZone:timeZone];
    [formatter setDateFormat : @"yyyy MM dd HH:mm"];

    NSString *stringTime = date;

    NSDate *dateTime = [formatter dateFromString:stringTime];
    [formatter release];

    return dateTime;
}