Какой часовой пояс использует запланированное задание для Предпочтительного времени начала - PullRequest
5 голосов
/ 14 марта 2012

У нас есть запланированное задание, которое запускается 1-го числа каждого месяца с предпочтительным временем запуска 1:00. Задание было запланировано с использованием интерфейса Salesforce (Разработка | Классы Apex | Расписание Apex). При запуске он устанавливает поле месяца для записей на основе системной даты (System.today();). Иногда месяц задается неправильно, и я подозреваю, что это связано с тем, что переменная даты установлена ​​на Системную дату.

Если я установлю задание на выполнение в 1:00, войдя в систему как мой пользователь (с часовым поясом, установленным на CDT), используя интерфейс, какое значение будет возвращено System.today()? Будет ли возвращена текущая дата CDT или дата GMT?

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Запланированные задания выполняются как «системные», но я думаю, что пользовательский контекст все еще существует, что означает, что Date.today() или System.today() будет в CDT.

Обновление:

Только что протестировал и DateTime.now() возвращает значения по Гринвичу.

Еще одно обновление:

Документы говорят, Date.today() возвращает дату в часовом поясе текущего пользователя. Основываясь на приведенном ниже тесте, система знает, кто пользователь, и знает часовой пояс пользователя, поэтому Date.today() будет текущей датой в часовом поясе пользователя. Я подтвердил это, установив часовой пояс на +10, и система вернула дату 2012-03-15.

// Brisbane +10 time zone
global void execute(SchedulableContext SC) {
  System.debug(DateTime.now()); // 2012-03-14 19:24:39
  System.debug(DateTime.now().formatLong()); // 3/15/2012 5:24:39 AM AEST
  System.debug(Date.today()); // 2012-03-15 00:00:00
  System.debug(UserInfo.getUserName()); // dev1@jeremyross.org
}
2 голосов
/ 14 марта 2012

С Руководство разработчика APEX :

The System.Schedule method uses the user's timezone for the basis of all schedules.
...