Google 教室 API ScheduledTime 的日期格式

Date Format For Google Classroom API ScheduledTime

我在使用 Google 教室 API 创建作业时尝试设置预定时间。但是,我对需要哪种日期格式感到困惑。根据错误消息,它似乎接受了一个字符串,该字符串最后包含时间戳和时区或 Z。其中,我尝试使用 System.currentTimeMillis() + "Z",以及 googleDate.getValue() + "Z"googleDate.getValue(),因为 Google 日期格式似乎是基于 this doc 的方式但是 none 似乎有效。

有什么想法吗?

谢谢。

  String timezone = timestamp + offset + "";
                System.currentTimeMillis()
                com.google.api.client.util.DateTime googleDate = 
   new com.google.api.client.util.DateTime(new java.util.Date());
//               Date javaDate = new Date(googleDate.getValue());

                CourseWork courseWork = new CourseWork()
                        .setCourseId(course.getId())
                        .setTitle("title PUBLISHED 2")
                        .setDescription("desc")
                        .setScheduledTime(googleDate.getValue() + "Z")
                        .setMaxPoints(100.0)
                        .setDueDate(date)
                        .setDueTime(timeOfDay)
                        .setWorkType("ASSIGNMENT")
                        .setState("PUBLISHED")
                        ;

这是我手动添加时间戳并将其转换为字符串时得到的结果。

而这使用 Google 日期。

还有新的 Java 8 个 API

这有效:

LocalDate localDate = LocalDate.now().plusDays(7);
                    java.util.Date date1 = java.util.Date.from(localDate.atStartOfDay()
                                    .atZone(ZoneId.systemDefault())
                                    .toInstant());

                    String s = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX").format(date1);

似乎导入使用的是 Google 日期 class 而不是 java.util.date。

java.time

我建议您使用 java.time,现代 Java 日期和时间 API,作为您的日期和时间工作。以下代码给出的结果与您的答案中的代码相同。

    LocalDate localDate = LocalDate.now().plusDays(7);
    String s = localDate.atStartOfDay(ZoneId.systemDefault())
            .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    System.out.println(s);

今天我所在时区的输出:

2021-10-20T00:00:00+02:00

与您自己的答案相比,您的转换次数更少,并且您无需编写自己的格式模式字符串,因为我们需要的格式化程序是内置的。