Простой вопрос о часовом поясе для Google Script - PullRequest
0 голосов
/ 27 марта 2020

Я новичок, но я использую программу "поваренная книга", которая помещает свои данные в Google Sheet. Все работает хорошо, но у меня есть два утверждения, которые являются проблемой:

var datenow = Utilities.formatDate(new Date(), "EDT", "yyyy-MM-dd'T'hh:mm a'Z'").slice(0,10); 

и

var timenow = Utilities.formatDate(new Date(), "America/NewYork", "yyyy-MM-dd'T'hh:mm a'Z'").slice(11,19); 

В примере программы используется "PST" для стандартного часового пояса Pacifi c. Когда я использую это, я получаю результат, который выглядит как GMT. Я хотел бы использовать EDT (восточное летнее время) и пробовал различные варианты (как указано выше) с странными результатами. Куда я сбился с пути? Это кажется простым, но я явно что-то делаю не так!

1 Ответ

1 голос
/ 27 марта 2020

Несколько вещей:

  • Вы должны использовать "America/New_York" для восточного времени США. Он автоматически выберет EST или EDT в зависимости от того, что применимо. Не используйте сокращения часовых поясов.
  • Буквы T и Z в строке временной метки имеют значение c, означающее:
    • T - это разделитель времени в формате ISO 8601 . Поскольку вы используете 12-часовые часы с индикатором am / pm, у вас нет метки времени ISO 8601, и поэтому вы не должны использовать букву T в своих выходных данных. Вместо этого используйте пробел или переключитесь на 24-часовые часы (HH:mm против hh:mm a), если вы хотите, чтобы строка соответствовала ISO 8601.
    • Z - это индикатор UT C в формат ISO 8601. Поскольку вы запрашиваете время в определенном c часовом поясе, вы не используете UT C, и поэтому не должны использовать букву Z в вашей выходной строке. Однако вы можете включить название или смещение часового пояса, используя z, Z или X токены, не помещая его в кавычки.
      Другими словами, вы можете использовать "yyyy-MM-dd hh:mm a z".
  • Не slice вашей выходной строки. Вместо этого просто предоставьте токены формата так, как вы хотите, чтобы вывод отображался. Если вы хотите разделить строки datenow и timenow, то в одном случае используйте "yyyy-MM-dd", а в другом - "hh:mm a".
...