Java 将Android中从Google Tasks API返回的RFC 3339 DateTime对象转换为字符串
我正在使用GoogleTasksAPI返回值,例如任务标题、任务注释和任务截止日期 当我尝试将到期日()作为字符串输出时,我得到了Java 将Android中从Google Tasks API返回的RFC 3339 DateTime对象转换为字符串,java,android,jodatime,datetime-format,google-tasks-api,Java,Android,Jodatime,Datetime Format,Google Tasks Api,我正在使用GoogleTasksAPI返回值,例如任务标题、任务注释和任务截止日期 当我尝试将到期日()作为字符串输出时,我得到了java.lang.IllegalArgumentException 我正在尝试使用simpleDataFormat(“yyyy-MM-dd'T'HH:MM:ss.SSS'Z')来进行此转换 我的猜测是,SimpleDateFormat不是一个好办法,但我尝试过的每一次转换都失败了。我愿意使用JodaISODateFormat,但即使这样也不行。我已经包含了相关的代码
java.lang.IllegalArgumentException
我正在尝试使用simpleDataFormat(“yyyy-MM-dd'T'HH:MM:ss.SSS'Z')
来进行此转换
我的猜测是,SimpleDateFormat
不是一个好办法,但我尝试过的每一次转换都失败了。我愿意使用JodaISODateFormat
,但即使这样也不行。我已经包含了相关的代码片段
我的任务(调用项)类定义为:
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();
}
}
@覆盖
受保护列表doInBackground(无效…arg0){
List itemList=new ArrayList();
DateFormat格式化程序=新的SimpleDataFormat(“yyyy-MM-dd'T'HH:MM:ss.SSS'Z'”;
Log.v(标签,“开始做背景…”);
试一试{
列表结果=新建ArrayList();
com.google.api.services.tasks.tasks.TasksOperations.List listRequest=service.tasks().List(“@default”);
listRequest.setFields(“项目/标题、项目/注释、项目/到期”);
列表任务=listRequest.execute().getItems();
如果(任务!=null){
for(任务:任务){
add(task.getTitle());
项目=新项目();
item.setTitle(task.getTitle());
item.setNotes(task.getNotes());
DateTime due=task.getDue();
项目。设置日期到期(到期);
Log.v(标记,“到期日期字符串:”+formatter.format(到期));
项目列表。添加(项目);
}
}否则{
Log.v(标签,“结束没有任务的doInBackground”);
结果。添加(“无任务”);
}
Log.v(标记“结束接收任务的doInBackground”);
返回项目列表;
}捕获(IOE异常){
Log.v(标记“结束doInBackground with IOException…”);
任务示例handleGoogleException(e);
项目=新项目();
item.setTitle(如getMessage());
项目列表。添加(项目);
返回项目列表;
//return Collections.singletonList(如getMessage());
}捕获(异常e2){
Log.v(标记“结束doInBackground,带有一般异常…”);
e2.printStackTrace();
项目=新项目();
item.setTitle(e2.getMessage());
项目列表。添加(项目);
返回项目列表;
}最后{
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$work(ThreadPoolExecutor.java:569),java.lang.Thread.run(Thread.java:856)]
以下是任务资源:
{“到期”:“2012-07-04T00:00:00.000Z”,“注释”:“注释1”,“标题”:“测试1”}
似乎Google Java客户端库助手函数
import com.Google.api.client.util.DateTime;
已经返回一个文本字符串,无需进行转换。这不是我所期望的!请您发布错误的完整堆栈跟踪。2) 提供了从Google Task接收到的资源数据,以便我们可以从您的日期模式中进行匹配?谢谢,我现在尝试添加这两个数据。我对Eclipse不太熟悉,我从调试窗口的“Variables”选项卡中获取了这些值。如果不是这样,请纠正我。您的评论让我思考了一下这个问题,然后当我查看任务资源(复制/粘贴)时,我注意到了明文。Java客户端库助手类似乎已经以字符串格式输出了日期!所以需要转换任何东西。奇怪的