2012-10-19 52 views
2

我有保留一个的NSString日期:如何从字符串变量格式化数据

1900-01-01T11:00:00 

我需要格式化,所以我有一个格式化:

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"dd/MM/yyyy hh:mm:ss a"]; 

如何现在格式化这个字符串?

NSString* formatedDateString = [df ???]; 

回答

4

创建日期格式化器,一个返回日期对象用于给定的字符串,创建第二个日期格式化器,返回在期望的字符串格式。

NSDateformatter *inputFormatter = [[NSDateformatter alloc] init]; 
[inputFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 
[inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
NSDate *date = [inputFormatter dateFromString:dateString]; 

NSDateformatter *outputFormatter = [[NSDateformatter alloc] init]; 
[outputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
[outputFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"]; 

NSString *outputString = [outputFormatter stringFromDate:date]; 

但你也可以让输出日期格式决定中关于语言环境的风格:

NSDateformatter *outputFormatter = [[NSDateformatter alloc] init]; 
[outputFormatter setDateStyle:NSDateFormatterShortStyle]; 
[outputFormatter setTimeStyle:NSDateFormatterShortStyle]; 
NSString *outputString = [outputFormatter stringFromDate:date]; 

了美国语言环境,你现在应该猫所需的格式。


如果要强制格式“DD/MM/YYYY HH:mm:ss的一个”用户,你还应该设置输出格式日期的语言环境。

一个完整的命令行示例。

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 


     NSString *dateString1 = @"2012-12-31T11:00:00"; 
     NSString *dateString2 = @"2012-12-31T14:00:00"; 
     NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
     [inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
     [inputFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 

     NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; 
     [outputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
     [outputFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"]; 


     NSDate *date1 = [inputFormatter dateFromString:dateString1]; 
     NSDate *date2 = [inputFormatter dateFromString:dateString2]; 

     NSString *outputString1 = [outputFormatter stringFromDate:date1]; 
     NSString *outputString2 = [outputFormatter stringFromDate:date2]; 

     NSLog(@"%@", outputString1); 
     NSLog(@"%@", outputString2); 

    } 
    return 0; 
} 

如果你不设置像[outputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];的语言环境会导致做的格式丑陋的混合与用户的sefault语言环境,如果没有happend是“EN_US”

即德国:31/12/2012 02:00:00 nachm.这是一个格式不在德文中使用。

为了支持用户的语言和语言环境,您应该使用不同的样式。


提供的q&a rmaddy表明,有罕见的情况下,当解析格式被改写。为了避免这种情况,设置输入格式的格式在一定的语言环境,如[inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];

+0

日期,我在初始字符串为“1900-01-01T11:00:00”你的代码“日期”为空,因此“outputString”也是空 – 1110

+0

我的格式是不正确的 – vikingosegundo

+0

这是一场噩梦,我仍然得到空 – 1110

-3

例如用于获取当前日期:

-(void) getDate 

{ 
    NSString *theDate;  
    NSString *theTime; 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy-MM-dd"];   
    NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init]; 
    [timeFormat setDateFormat:@"HH:mm:ss"]; 
    NSDate *now = [[NSDate alloc] init]; 
    theDate = [dateFormat stringFromDate:now]; 
    theTime = [timeFormat stringFromDate:now]; 
    //2012-09-21 02:00:00 
    self.deviceCurrentTime=[NSString stringWithFormat:@"%@ %@",theDate,theTime]; 
} 
+0

不,使用“stringFromDate”,但我的约会已经在字符串我只是需要对其进行格式化 – 1110

+0

的NSDate *的NSDate = [DATEFORMAT dateFromString:现在]。 –

+0

这不会回答问题,也没有理由创建两个格式化程序来解析单个值。 – rmaddy

0

您需要创建两个日期格式,一个用于分析,一个用于格式化;您的解析格式为“yyyy-MM-ddThh:mm:ss”,输出格式为“dd/MM/yyyy hh:mm:ss a”。所以,这样的事情:

NSString * targetString = @"1900-01-01'T'11:00:00"; 

NSDateFormatter *parseFormat = [[NSDateFormatter alloc] init]; 
[parseFormat setDateFormat:@"yyyy-MM-ddThh:mm:ss"]; 
NSDate * date = [parseFormat dateFromString:targetString]; 

NSDateFormatter * outputFormat = [[NSDateFormatter alloc] init]; 
[outputFormat setDateFormat:@"dd/MM/yyyy hh:mm:ss a"; 
NSString * outputString = [parseFormat stringFromDate:date]; 
+0

您对parseFormat的格式不正确。 T应该被引用。 '@ “YYYY-MM-dd'T'hh:MM:SS”' – rmaddy

+0

感谢您的指正!这就是我在StackOverflow中所喜爱的。你试图帮助别人,你最终得到帮助;) – barley

相关问题