2012-03-14 8 views
4

毎月1日に実行されるスケジュールされたジョブが、優先開始時刻が1amに設定されています。ジョブは、Salesforceインタフェース(Develop | Apex Classes | Schedule Apex)を使用してスケジュールされました。実行すると、システム日付(System.today();)に基づいてレコードの月フィールドが設定されます。時折、月が間違って設定されていると、私はそれがシステム日付に設定された日付変数のためだと思う。スケジュールされたジョブが優先開始時刻に使用する時間帯

ジョブを1amで実行するように設定し、インターフェイスを使用して自分のユーザー(タイムゾーンを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

あなたは正しいです。以前はこのテストは考えていませんでしたが、明日の日付を持つタイムゾーンにユーザを設定して、Execute Anonymousの '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

ジョブ内の日付/時刻値のセマンティクスではなく、ジョブの実行時を指します。 –

関連する問題