日付関連

日付・日時 と 文字列の変換

  • Date→String
    Date型のままではフォーマットの形式を指定できない。一度Datetime形に変換する必要がある。
    Date d = Date.newInstance(2019, 6, 10);
    String.valueOf(d); // 2019-06-10
    d.format();        // 2019/06/10 (戻り値のStringはコンテキストユーザのロケールの日付形式)
    Datetime.newInstance(d.year(), d.month(), d.day()).format('M/d(E)'); // 6/10(Mon)
  • String→Date
    Date.parse('2019/06/10'); // 2019-06-10 (引数はコンテキストユーザのロケールの日付形式)
    Date.parse('2019/6/10');  // 2019-06-10
    Date.valueOf('2019-06-10'); // 2019-06-10
    Date.valueOf('2019-6-10');  // 2019-06-10
    Date.valueOf('2019-06-10T00:00:00');       // 2019-06-10
    Date.valueOf('2019-06-10T00:00:00+09:00'); // 2019-06-10
    Date.valueOf('2019-06-10 00:00:00+09:00'); // 2019-06-10
    Date.valueOf('2019-06-10 20:00:00-08:00'); // 2019-06-10
  • Datetime→String
    Datetime dt = Datetime.newInstance(2019, 6, 10, 1, 23, 45);
    String.valueOf(dt);    // 2019-06-10 01:23:45
    String.valueOfGmt(dt); // 2019-06-09 16:23:45
    dt.format(); // 2019/06/10 1:23
    dt.format('yyyy-MM-dd\'T\'HH:mm:ssXXX'); // 2019-06-10T01:23:45+09:00 (フォーマットについては下記のリンクを参照)
    dt.format('yyyy-MM-dd\'T\'HH:mm:ssXXX', 'America/New_York');  // 2019-06-09T12:23:45-04:00
    dt.formatGmt('yyyy-MM-dd\'T\'HH:mm:ssXXX'); // 2019-06-09T16:23:45Z
  • String→Datetime
    Datetime.parse('2019/06/10 01:23'); // 2019-06-10T01:23:00+09:00
    Datetime.valueOf('2019-06-10 01:23:45');       // 2019-06-10T01:23:45+09:00
    Datetime.valueOf('2019-06-10 01:23:45Z');      // 2019-06-10T01:23:45+09:00
    Datetime.valueOf('2019-06-10 01:23:45+0900');  // 2019-06-10T01:23:45+09:00
    Datetime.valueOf('2019-06-10 01:23:45+09:00'); // 2019-06-10T01:23:45+09:00
    Datetime.valueOfGmt('2019-06-10 01:23:45');       // 2019-06-10T10:23:45+09:00
    Datetime.valueOfGmt('2019-06-10 01:23:45Z');      // 2019-06-10T10:23:45+09:00
    Datetime.valueOfGmt('2019-06-10 01:23:45+0900');  // 2019-06-10T10:23:45+09:00
    Datetime.valueOfGmt('2019-06-10 01:23:45+09:00'); // 2019-06-10T10:23:45+09:00

    日付 と 日時 の変換

  • Date→String
    Date d = Date.newInstance(2019, 6, 10);
    String.valueOf(d); // 2019-06-10
    d.format();        // 2019/06/10 (戻り値のStringはコンテキストユーザのロケールの日付形式)
    Datetime.newInstance(d.year(), d.month(), d.day()).format('M/d(E)'); // 6/10(Mon)
  • String→Date
    Date.parse('2019/06/10'); // 2019-06-10 (引数はコンテキストユーザのロケールの日付形式)
    Date.parse('2019/6/10');  // 2019-06-10
    Date.valueOf('2019-06-10'); // 2019-06-10
    Date.valueOf('2019-6-10');  // 2019-06-10
    Date.valueOf('2019-06-10T00:00:00');       // 2019-06-10
    Date.valueOf('2019-06-10T00:00:00+09:00'); // 2019-06-10
    Date.valueOf('2019-06-10 00:00:00+09:00'); // 2019-06-10
    Date.valueOf('2019-06-10 20:00:00-08:00'); // 2019-06-10
  • Datetime→String
    Datetime dt = Datetime.newInstance(2019, 6, 10, 1, 23, 45);
    String.valueOf(dt);    // 2019-06-10 01:23:45
    String.valueOfGmt(dt); // 2019-06-09 16:23:45
    dt.format(); // 2019/06/10 1:23
    dt.format('yyyy-MM-dd\'T\'HH:mm:ssXXX'); // 2019-06-10T01:23:45+09:00 (フォーマットについては下記のリンクを参照)
    dt.format('yyyy-MM-dd\'T\'HH:mm:ssXXX', 'America/New_York');  // 2019-06-09T12:23:45-04:00
    dt.formatGmt('yyyy-MM-dd\'T\'HH:mm:ssXXX'); // 2019-06-09T16:23:45Z
  • String→Datetime
    Datetime.parse('2019/06/10 01:23'); // 2019-06-10T01:23:00+09:00
    Datetime.valueOf('2019-06-10 01:23:45');       // 2019-06-10T01:23:45+09:00
    Datetime.valueOf('2019-06-10 01:23:45Z');      // 2019-06-10T01:23:45+09:00
    Datetime.valueOf('2019-06-10 01:23:45+0900');  // 2019-06-10T01:23:45+09:00
    Datetime.valueOf('2019-06-10 01:23:45+09:00'); // 2019-06-10T01:23:45+09:00
    Datetime.valueOfGmt('2019-06-10 01:23:45');       // 2019-06-10T10:23:45+09:00
    Datetime.valueOfGmt('2019-06-10 01:23:45Z');      // 2019-06-10T10:23:45+09:00
    Datetime.valueOfGmt('2019-06-10 01:23:45+0900');  // 2019-06-10T10:23:45+09:00
    Datetime.valueOfGmt('2019-06-10 01:23:45+09:00'); // 2019-06-10T10:23:45+09:00

    日付 と 日時 の変換

  • Date→Datetime
    Date d = Date.newInstance(2019, 6, 10);
    Datetime.newInstance(d.year(), d.month(), d.day()); // 2019-06-10T00:00:00+09:00
  • Datetime→Date
    Datetime dt = Datetime.newInstance(2019, 6, 10, 1, 23, 45);
    dt.date();        // 2019-06-10 (ローカルタイムの日付を返す)
    dt.dateGMT();     // 2019-06-09 (GMTの日付を返す)
    // 参考
    Date.valueOf(dt); // 2019-06-09 04:00:00 (※注意)
  • エポック秒(UNIX秒)の変換
    // エポック秒 → Datatime
    Long epochSec = 1560097380L;
    Datetime dt = Datetime.newInstance(epochSec * 1000); // 2019-06-10T01:23:00+09:00
    // Datetime → エポック秒
    Datetime dt2 = Datetime.newInstance(2019, 06, 10, 01, 23, 00);
    Long epochSec2 = dt2.getTime() / 1000; // 1560097380L

    Date クラス

  • Date クラス
  • 差分日数
    メソッドをコールする日付が secondDate の後に発生する場合、戻り値は負になります。
    Date startDate = Date.newInstance(2008, 1, 1);
    Date dueDate = Date.newInstance(2008, 1, 30);
    Integer numberDaysDue = startDate.daysBetween(dueDate);
  • 差分月数
    メソッドをコールした日付と指定された日付の間の月数を返します。日数の差異は無視されます。
    Date firstDate = Date.newInstance(2006, 12, 2);
    Date secondDate = Date.newInstance(2012, 12, 8);
    Integer monthsBetween = firstDate.monthsBetween(secondDate);
    System.assertEquals(72, monthsBetween);

    月初月末

  • 現在日付の月初
    // 実コード
    Date currentDate = Date.Today();
    Date curFirstDay = currentDate.toStartOfMonth();
    // デバッグ確認
    System.debug('===========================');
    System.debug('■■■ currentDate-->' + currentDate);
    System.debug('■■■ curFirstDay-->' + curFirstDay);
    System.debug('===========================');
  • 先月の月初
    // 実コード
    Date currentDate = Date.Today();
    Date lastMon = currentDate.addMonths(-1);
    Date lastMonFirstDay = lastMon.toStartOfMonth();
    // デバッグ確認
    System.debug('===========================');
    System.debug('■■■ currentDate-->' + currentDate);
    System.debug('■■■ lastMonFirstDay-->' + lastMonFirstDay);
    System.debug('===========================');
  • 翌月の月初
    // 実コード
    Date currentDate = Date.Today();
    Date nextMon = currentDate.addMonths(1);
    Date nextMonFirstDay = nextMon.toStartOfMonth();
    // デバッグ確認
    System.debug('===========================');
    System.debug('■■■ currentDate-->' + currentDate);
    System.debug('■■■ nextMonFirstDay-->' + nextMonFirstDay);
    System.debug('===========================');
  • 現在日付の月末
    // 実コード
    Date currentDate = Date.Today();
    Date nextMon = currentDate.addMonths(1);
    Date nextMonFirstDay = nextMon.toStartOfMonth();
    Date currentLastDay = nextMonFirstDay.addDays(-1);
    // デバッグ確認
    System.debug('===========================');
    System.debug('■■■ currentDate-->' + currentDate);
    System.debug('■■■ currentLastDay-->' + currentLastDay);
    System.debug('===========================');
  • 先月の月末
    // 実コード
    Date currentDate = Date.Today();
    Date currenMonFirstDay = currentDate.toStartOfMonth();
    Date currentLastMonLastDay = currenMonFirstDay.addDays(-1);
    // デバッグ確認
    System.debug('===========================');
    System.debug('■■■ currentDate-->' + currentDate);
    System.debug('■■■ currentLastMonLastDay-->' + currentLastMonLastDay);
    System.debug('===========================');
  • 翌月の月末
    // 実コード
    Date currentDate = Date.Today();
    Date next2Mon = currentDate.addMonths(2);
    Date next2MonFirstDay = next2Mon.toStartOfMonth();
    Date nextMonLastDay = next2MonFirstDay.addDays(-1);
    // デバッグ確認
    System.debug('===========================');
    System.debug('■■■ currentDate-->' + currentDate);
    System.debug('■■■ nextMonLastDay-->' + nextMonLastDay);
    System.debug('===========================');

    曜日

  • 曜日部分を取得する方法
    '月'、'火'ではなく'Mon'や'Thu'という形で取得できるのでそこから日本語表記には別途変換処理が必要になります。
    // 月曜日
    Datetime day1 = Datetime.newInstance(2019, 9, 9);
    System.debug(day1.format('E'));
    // 火曜日
    Datetime day2 = Datetime.newInstance(2019, 9, 10);
    System.debug(day2.format('E'));
    // 水曜日
    Datetime day3 = Datetime.newInstance(2019, 9, 11);
    System.debug(day3.format('E'));
    // 木曜日
    Datetime day4 = Datetime.newInstance(2019, 9, 12);
    System.debug(day4.format('E'));
    // 金曜日
    Datetime day5 = Datetime.newInstance(2019, 9, 13);
    System.debug(day5.format('E'));
    // 土曜日
    Datetime day6 = Datetime.newInstance(2019, 9, 14);
    System.debug(day6.format('E'));
    // 日曜日
    Datetime day7 = Datetime.newInstance(2019, 9, 15);
    System.debug(day7.format('E'));