2012-07-31 2 views
3

Google Tasks API를 사용하여 작업 제목, 작업 메모 및 작업 마감일과 같은 값을 반환합니다.Coverting RFC 3339 Android의 DateTime 객체가 Google Tasks API에서 String으로 반환되었습니다.

기한 (stored as RFC 3339)을 문자열로 출력하려고하면 java.lang.IllegalArgumentException이됩니다.

이 변환을 수행하려면 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")을 사용하려고합니다.

내 생각에 SimpleDateFormat은 갈 길이 아니지만 시도한 다른 모든 변환이 실패했습니다. 나는 Joda를 사용하는 것에 열려있다 ISODateFormat 그러나 심지어 그것은 일하지 않았다. 관련 코드 스 니펫을 포함 시켰습니다.

내 작업 (콜 항목) 클래스 정의는 다음과 같습니다

import com.google.api.client.util.DateTime; 

public class Item { 

Long id; 
String title; 
String description; 
String extId1; 
Integer status; 
DateTime dateDue; 
DateTime dateLastEdit; 
DateTime dateCompleted; 

Item parent; 

public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getDescription() { 
    return description; 
} 

public void setNotes(String description) { 
    this.description = description; 
} 

public String getExtId1() { 
    return extId1; 
} 

public void setExtId1(String extId1) { 
    this.extId1 = extId1; 
} 

public Integer getStatus() { 
    return status; 
} 

public void setStatus(Integer status) { 
    this.status = status; 
} 

public DateTime getDateDue() { 
    return dateDue; 
} 

public void setDateDue(DateTime dateDue) { 
    this.dateDue = dateDue; 
} 

public DateTime getDateLastEdit() { 
    return dateLastEdit; 
} 

public void setDateLastEdit(DateTime dateLastEdit) { 
    this.dateLastEdit = dateLastEdit; 
} 

public DateTime getDateCompleted() { 
    return dateCompleted; 
} 

public void setDateCompleted(DateTime dateCompleted) { 
    this.dateCompleted = dateCompleted; 
} 

public Item getParent() { 
    return parent; 
} 

public void setParent(Item parent) { 
    this.parent = parent; 
} 

} 

이는 내가 출력에 반환 날짜를 시도 doInBackground 방법을 보여 잘못 보려면 :

@Override 
protected List<Item> doInBackground(Void... arg0) { 
    List<Item> itemList = new ArrayList<Item>(); 
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
    Log.v(TAG, "Start doInBackground..."); 
    try { 
     List<String> result = new ArrayList<String>(); 
     com.google.api.services.tasks.Tasks.TasksOperations.List listRequest = service.tasks().list("@default"); 
     listRequest.setFields("items/title,items/notes,items/due"); 
     List<Task> tasks = listRequest.execute().getItems(); 
     if (tasks != null) {    
      for (Task task : tasks) { 
       result.add(task.getTitle()); 
       Item item = new Item();    
       item.setTitle(task.getTitle()); 
       item.setNotes(task.getNotes()); 
       DateTime due = task.getDue(); 
       item.setDateDue(due); 
       Log.v(TAG, "Due date string: " + formatter.format(due)); 
       itemList.add(item); 
      } 
     } else { 
      Log.v(TAG, "End doInBackground with no tasks"); 
      result.add("No tasks."); 
     }  
     Log.v(TAG, "End doInBackground with tasks received"); 
     return itemList;   
    } catch (IOException e) { 
     Log.v(TAG, "End doInBackground with IOException..."); 
     tasksSample.handleGoogleException(e); 
     Item item = new Item(); 
     item.setTitle(e.getMessage()); 
     itemList.add(item); 
     return itemList; 
     //return Collections.singletonList(e.getMessage()); 
    } catch (Exception e2) { 
     Log.v(TAG, "End doInBackground with generic exception..."); 
     e2.printStackTrace(); 
     Item item = new Item(); 
     item.setTitle(e2.getMessage()); 
     itemList.add(item); 
     return itemList; 
    } finally { 
     tasksSample.onRequestCompleted(); 
    } 
} 

편집 :

요청한대로 다음은 스택 추적입니다.

[java.text.DateFormat.format (DateFormat.java:365), java.text.Format.format (Format.java:93), com.google.api.services.samples.tasks.android.AsyncLoadTasks.doInBackground (AsyncLoadTasks.java:78), com.google.api.services.samples.tasks.android.AsyncLoadTasks.doInBackground (AsyncLoadTasks.java:1), android.os.AsyncTask $ 2.call (AsyncTask.java:264), java .util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:305), java.util.concurrent.FutureTask.run (FutureTask.java:137), android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java : 208), java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1076), java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:569), java.lang.Thread.run (Thread.java : 856)]

다음은 작업 리소스입니다.

{ "때문에이": "2012-07-04T00 : 00 : 00.000Z", "메모": "주", "제목": "TEST1"을}

+2

제발, 1) 오류의 전체 스택 추적을 게시하십시오. 2) Google Task에서받은 자원 데이터를 제공하여 날짜 패턴과 일치시킬 수 있습니까? –

+0

고마워, 나는 지금 둘 다 추가하려고했다. 나는 이클립스에 익숙하지 않다. 디버그 윈도우의 "변수"탭에서 값을 얻는다. 이것이 그렇게 할 수 없다면 나를 바로 잡으십시오. –

+0

귀하의 의견은이 문제에 대해 조금 생각하게 만들었습니다. 그런 다음 작업 리소스 (복사/붙여 넣기)를 볼 때 일반 텍스트를 발견했습니다. Java 클라이언트 라이브러리 도우미 클래스는 이미 날짜를 문자열 형식으로 출력합니다! 그래서 아무것도 변환해야합니다. 기묘한! –

답변

1

그것은 보인다 그 Google Java 클라이언트 라이브러리 도우미 함수 import com.google.api.client.util.DateTime;

이미 변환 할 필요없이 텍스트 문자열을 반환합니다. 내가 기대하고 있었던 것이 아니었다!

관련 문제