2012-03-14 4 views
4

매월 1 일에 예약 된 시작 시간이 1am 인 예약 된 작업이 있습니다. 작업은 Salesforce 인터페이스 (Develop | Apex Classes | Schedule Apex)를 사용하여 예약되었습니다. 실행될 때 시스템 날짜 (System.today();)를 기반으로 레코드의 월 필드를 설정합니다. 때로는 그 달이 잘못 설정되어 있고, 날짜 변수가 시스템 날짜로 설정되어 있기 때문인 것으로 판단됩니다.예약 된 작업이 예약 된 시작 시간으로 사용하는 시간대

작업을 오전 1시에 실행하도록 설정하고 인터페이스를 사용하여 내 사용자 (시간대를 CDT로 설정)에 로그인하면 어떤 값이 System.today()에 의해 반환됩니까? 현재 CDT 날짜 또는 GMT 날짜가 반환됩니까? the APEX dev guide에서

답변

4

예약 된 작업은 "시스템"으로 실행,하지만 난 Date.today() 또는 System.today()는 CDT에있을 것입니다 의미 사용자 컨텍스트가 여전히 있다고 생각.

업데이트 :

그냥 이것과 DateTime.now() 반환 GMT 값을 테스트했다.

또 다른 갱신 :

이 문서는 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()); // [email protected] 
} 
+0

맞습니다. 이 테스트를 더 일찍 생각하지는 않았지만, 내일 사용자의 시간대를 설정하고 익명 실행에서'System.today();'를 실행 해 보았습니다. 실제로는 현재 사용자의 시간대를 사용합니다. 날짜를 반환합니다. 그것은'2012-03-15 00 : 00 : 00'을 반환했습니다. –

1

는 :

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

작업 내에서 날짜/시간 값의 의미론이 아니라 작업 실행 시점을 나타냅니다. –