APEX:YYYY年MM月DD日hh:mm PM/AMの文字列をUnixTime形式に変更する

1 min読了の目安(約1200字TECH技術記事

背景

メール件名に日付情報が入っているので、Salesforceの日付/時刻 型に格納したい

変換前

YYYY年MM月DD日hh:mm PM/AM

変換後

YYYY-MM-DDThh:mm:ss.000+0000

ソースコード


String patternSentenceSubjectTime = '\\((.*)年(.*)月(.*)日(.*):(.*)\\s(AM|PM)\\)';
	// $1 年
  // $2 月
  // $3 日
  // $4 時
  // $5 分
  // $6 PM/AM

Pattern sentencePatternSubjectTime = Pattern.compile(patternSentenceSubjectTime);

Integer amount,subYear,subMonth,subDay,subHour,subMinute = 0;

while(sentenceMatcherSubjectTime.find()){
                subYear	= Integer.valueOf(sentenceMatcherSubjectTime.group(1));
                subMonth	= Integer.valueOf(sentenceMatcherSubjectTime.group(2));
                subDay	= Integer.valueOf(sentenceMatcherSubjectTime.group(3));
                subMinute	= Integer.valueOf(sentenceMatcherSubjectTime.group(5));
            if (sentenceMatcherSubjectTime.group(6) == 'PM'){
                subHour	= Integer.valueOf(sentenceMatcherSubjectTime.group(4))+12;
            }
            else {
                subHour	= Integer.valueOf(sentenceMatcherSubjectTime.group(4));
            }
		 dt =  Datetime.newInstance( subYear,subMonth,subDay,subHour,subMinute,0);
        }

結果

こんな感じで入るようになった。ヨシ!!