2017-10-03 10 views
1

QuickstartAPI referenceを使用してGoogleタスクアプリのプロトタイプを作成しています。タスクの取得に問題はありません。質問は、期日が保存されている時間帯は何ですか?私は、デューデートをドキュメントごとのDateTimeとして取得し、デフォルト(ローカル)のタイムゾーンに表示された値に変換します。Googleタスクではどのようなタイムゾーンを使用していますか?

「Wed、Oct 4」(Googleカレンダーでタスクを10月4日に移動した場合に表示されるもの)などの予定日は、「Wed、Oct 4 12:00 am "(UTC:)ですので、ローカルタイムゾーン(PDT)に変換すると、「Tue、Oct 3 5:00 pm」と表示されます。

これは、Googleタスクがすべてのタスクの日付と時刻をUTCで保存し、ローカルタイムゾーンの日付と時刻として解釈すると考えています(つまり、ニューヨークにいた場合は、 UTCで4午前12時00分。これは、あなたがタイムゾーンを変更した場合、タスクのための日付は、Googleカレンダーのインターフェースに変更しないことを、私の観察と一致する。

誰もが確認または拒否することはできますか?

がここに私ですコードスニペットは、基本的にクイックスタートに続いて表示されます。 取得中...

ディスプレイに日付と時刻を計算
private List<Task> getTasks() throws IOException { 
    List<Task> tasks = 
      mService.tasks() 
        .list("@default") 
        .setFields("items/id,items/title,items/notes,items/status,items/due,items/completed") 
        .execute() 
        .getItems(); 
    return tasks; 

} 

 final boolean isCompleted = "completed".equals(task.getStatus()); 
    viewHolder.mCompleteCheckbox.setChecked(isCompleted); 
    viewHolder.mTitle.setText(task.getTitle()); 
    if ((task.getNotes() == null) || task.getNotes().isEmpty()) { 
     viewHolder.mNotes.setVisibility(GONE); 
    } else { 
     viewHolder.mNotes.setVisibility(View.VISIBLE); 
     viewHolder.mNotes.setText(task.getNotes()); 
    } 
    final DateTime dueOrCompletedDate = isCompleted ? task.getCompleted() : task.getDue(); 
    if (dueOrCompletedDate == null) { 
     viewHolder.mDueOrCompleted.setVisibility(GONE); 
    } else { 
     viewHolder.mDueOrCompleted.setVisibility(View.VISIBLE); 
     final String dateTimeString = Utils.timeMillisToDefaultShortDateTime(dueOrCompletedDate.getValue()); 
     viewHolder.mDueOrCompleted.setText(dateTimeString); 
    } 

と私は今、正しい日付を取得するためにUTCに変換しています日時変換自体:

 public static String dateFormat = "EEE, MMM d"; 
    public static String timeMillisToDefaultShortTime(final long timeMillis) { 
    DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT); 
    df.setTimeZone(TimeZone.getTimeZone("UTC")); 
    String formattedTime = df.format(timeMillis); 
    //TODO: Bit of a hack; Parse out p.m. and PM to hh:mmpm (to save space) 
    return formattedTime.replace("p.m.","pm").replace("P.M.","pm").replace("PM","pm").replace(" pm","pm") 
      .replace("a.m.","am").replace("A.M.","am").replace("AM","am").replace(" am","am"); 
    } 
    public static String timeMillisToDefaultShortDateTime(final long timeMillis) { 
     String defaultShortTime = timeMillisToDefaultShortTime(timeMillis); 
     if (defaultShortTime.equals("12:00am")) defaultShortTime = ""; 
     return timeMillisToDateFormat(timeMillis, dateFormat).concat(" ").concat(defaultShortTime); 
    } 
    private static String timeMillisToDateFormat(long milliSeconds, String dateFormat) 
    { 
    // Create a DateFormatter object for displaying date in specified format. 
    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat); 
    //FIXME: Convert to UTC 
    formatter.setTimeZone(TimeZone.getTimeZone("UTC")); 

    // Create a calendar object that will convert the date and time value in milliseconds to date. 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(milliSeconds); 
    return formatter.format(calendar.getTime()); 
    } 

UPDATE:クリア10月3日に予定されているタスクのデバッグビューは次のとおりです。

o2 = {[email protected]} size = 4 
0 = {[email protected]} "due" -> "2017-10-03T00:00:00.000Z" 
1 = {[email protected]} "id" -> "MDg1MjU5NjA3OTE3MzY1OTM2MjM6MDoxNzAwMTU3NzM" 
2 = {[email protected]} "status" -> "needsAction" 
3 = {[email protected]} "title" -> "xxxxx" 

答えて

0

Googleカレンダーを述べたので、私はthisはその質問に答えると思う:

夏時間

Googleカレンダーは、夏時間と の問題を避けるために協定世界時(UTC)を使用しています。

イベントが作成されると、それらはUTCに変換されますが、現地ではいつも が表示されます。

エリアが自分のタイムゾーンを切り替えると、その変更について が認識される前に作成されたイベントが間違ったタイムゾーンにある可能性があります。

+0

はい、私はそれを見ましたが、「UTCに変換されていますが、現地時間に常に表示されます。変換は「オフセットを加算または減算してUTCを取得する」または「単にUTCで日付を呼び出す」ことを意味しますか?後者のようです。 – Opus1217

関連する問題