簡體   English   中英

更改日期格式中的問題

[英]issue in Changing date formate

我有一個字符串數組,如下所示

newlymadeArray(
"03/05/2013",
"09/22/2013",
"03/02/2013",
"03/02/2013",
"08/22/2013",
"11/02/2013",
"07/08/2013",
"08/31/2013",
"05/13/2013",
"07/11/2013",
"10/07/2013",
"02/20/2013"

目前的甲酸鹽是MM / dd / yyyy

我想把它改成dd / MM / yyyy

我正在使用以下代碼

  NSLog(@"_newlymadeArray%@",_newlymadeArray);
//logic for changing date formate
for( int i=0; i<_newlymadeArray.count; i++){
    NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
    [dateFormatter1 setDateFormat:@"MM/dd/yyyy"];
    NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
    [dateFormatter2 setDateFormat:@"dd/MM/yyyy"];

    NSDate *old = [dateFormatter1 dateFromString:[_newlymadeArray objectAtIndex:i]];
    NSLog(@"old %@",old);

    NSString *old1 =[dateFormatter1 stringFromDate:old];

    NSDate *new = [dateFormatter2 dateFromString:old1];
    NSLog(@"new %@",new);

    NSString *string = [dateFormatter2 stringFromDate:new];
    NSLog(@"string %@",string);

    [_convertedBdates addObject:string];

        }

      NSLog(@"_convertedBdates%@",_convertedBdates);

這就是我作為輸出的東西

  old 2013-03-04 18:30:00 +0000
  new 2013-05-02 18:30:00 +0000
  string 03/05/2013
  old 2013-09-21 18:30:00 +0000
  new (null)
 string (null)
 ] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:     '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
 *** First throw call stack:

我的問題是為什么舊的打印2013-03-04而不是05/03/2013在第一次循環結束它被打印03/05/2013而不是05/03/2013當循環運行第二次它得到new中的null值,這就是為什么在數組程序中添加null值會崩潰的原因

請告訴我,我做錯了什么?

永遠不合適:

NSString *old1 =[dateFormatter1 stringFromDate:old];
NSDate *new = [dateFormatter2 dateFromString:old1];

您說,“使用一個格式化程序格式化日期...然后使用另一個格式化程序解析它。”

您已經解析了舊格式的值。 現在,您需要將其在新的格式進行格式化

我不是Objective-C開發人員,但我懷疑你只是想:

NSDate *date = [dateFormatter1 dateFromString:[_newlymadeArray objectAtIndex:i]];
NSString *string = [dateFormatter2 stringFromDate:date];
[_convertedBdates addObject:string];

注意如何只涉及一個日期,但是兩個字符串(原始格式和新格式)。

另請注意,無需在循環的每次迭代中創建一對新的格式化程序。 在循環之前創建它們並重用它們:

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

for (int i = 0; i < _newlymadeArray.count; i++) {
    NSDate *date = [oldFormatter dateFromString:[_newlymadeArray objectAtIndex:i]];
    NSString *string = [newFormatter stringFromDate:date];
    [_convertedBdates addObject:string];
}

(您可能需要檢查是否date為null,內環路,處理不好的數據,當然。)

試試這個:

NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
[dateFormatter1 setDateFormat:@"MM/dd/yyyy"];
NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
[dateFormatter2 setDateFormat:@"dd/MM/yyyy"];
for( int i=0; i<_newlymadeArray.count; i++){

    NSDate *old = [dateFormatter1 dateFromString:[_newlymadeArray objectAtIndex:i]];
    NSLog(@"old %@",old);

    if (old) {
        NSString *newDateString = [dateFormatter2 stringFromDate:old];
        NSLog(@"new %@",newDateString);
        [_convertedBdates addObject:newDateString];
    }
}
[dateFormatter1 release];
[dateFormatter2 release];
NSDateFormatter *fromDateFormatter = [[NSDateFormatter alloc] init];
[fromDateFormatter setDateFormat:@"MM/dd/yyyy"];

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

for (NSString *dateString in newlyMadeArray)
{
    NSDate *date = [fromDateFormatter dateFromString:dateString];
    NSString *newDateString = [toDateFormatter stringFromDate:date];
    [_convertedBdates addObject:newDateString];
}

首先,您應該將字符串“MM / dd / yyyy”轉換為“dd / MM / yyyy”。

for( int i=0; i<_newlymadeArray.count; i++){
    NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
    [dateFormatter1 setDateFormat:@"MM/dd/yyyy"];
    NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
    [dateFormatter2 setDateFormat:@"dd/MM/yyyy"];

    NSDate *old = [dateFormatter1 dateFromString:[_newlymadeArray objectAtIndex:i]];
    NSLog(@"old %@",old);



NSArray *arr = [[_newlymadeArray objectAtIndex:i] componentsSeparatedByString:@"/"];
    NSString *old1 = [NSString stringWithFormat:@"%@/%@/%@",[arr objectAtIndex:1],[arr objectAtIndex:0],[arr objectAtIndex:2]];
    NSDate *new = [dateFormatter2 dateFromString:old1];
    NSLog(@"new %@",new);

    NSString *string = [dateFormatter2 stringFromDate:new];
    NSLog(@"string %@",string);

    [_convertedBdates addObject:string];

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM