如何格式化字符串变量的数据

时间:2012-10-19 13:41:16

标签: iphone objective-c ios nsdateformatter

我有一个保留日期的NSString:

1900-01-01T11:00:00

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

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

如何格式化此字符串?

NSString* formatedDateString = [df ???];

3 个答案:

答案 0 :(得分: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 a”,则还应设置输出日期格式化程序的区域设置。

一个完整的命令行示例。

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"]];那样设置区域设置,那么如果它不是“en_US”,那么它会导致用户的sefault语言环境混乱,但是如果它不是'en_US'那么

即德语:31/12/2012 02:00:00 nachm.这是德语中未使用的格式。

要支持用户的语言和区域设置,您应该使用不同的样式。


提供的q&a rmaddy表示,在极少数情况下,解析格式会被重写。要避免这种情况,请将输入格式化的格式设置为某个区域设置,例如[inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];

答案 1 :(得分: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];

答案 2 :(得分:-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];
}