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