我有保留日期的NSString:
1900-01-01T11:00:00
我需要格式化,所以我有一个格式化:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd/MM/yyyy hh:mm:ss a"];
现在怎么格式化这个字符串?
NSString* formatedDateString = [df ???];
我有保留日期的NSString:
1900-01-01T11:00:00
我需要格式化,所以我有一个格式化:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd/MM/yyyy hh:mm:ss a"];
现在怎么格式化这个字符串?
NSString* formatedDateString = [df ???];
创建日期格式化器,一个返回日期对象用于给定的字符串,创建第二个日期格式化器,其返回从该日期所期望的格式的字符串。
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"]];
您需要创建两个日期格式,一个用于分析,一个用于格式化; 您解析格式为 “YYYY-MM-DDTHH:MM:SS” 和你的输出格式为 “DD / MM / YYYY HH:mm:ss的一个”。 所以,这样的事情:
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];
例如用于获取当前日期:
-(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];
}