こんにちは、管理人の@Salesforce.Zです。
数式で、二つのDatetime項目の差分を求めたい時にtimevalue関数の問題で、
60秒は繰り上げない、60分繰り上げないになってしまう。
今回、プログラムで、このDatetime項目の差分を求める例を提供したいと思います。
間違えた場合、ご指摘を宜しくお願い致します。
読んだら得ること
★ コード2つのDatetime項目の差分を求める方法
目次
日付時間の差分を計算する
数式の場合
通話時間を求めるとか、テスト時間を求めるとか、いろんな時間を求める例がある
今回、サンプルだけです、問題点は60秒、60分になった場合、繰り上げない
IF( EndDatetime__c - StartDatetime__c > 0 , LPAD(TEXT( FLOOR( MOD( (EndDatetime__c - StartDatetime__c ) * 24, 24 ) ) ),2,"0") & ":" & LPAD(TEXT( ROUND( MOD( (EndDatetime__c - StartDatetime__c) * 24 * 60, 60 ), 0 ) ),2,"0") & ":" & LPAD(TEXT( ROUND( MOD( (EndDatetime__c - StartDatetime__c) * 24 * 60 * 60, 60 ), 0 ) ),2,"0") , "")
コードの場合
//日付時間の差分を求める Decimal millisecs = decimal.valueOf(sObject.EndDatetime__c.getTime() -sObject.CallStartDatetime__c.getTime()); //計算結果を文字列に格納する String resultStr = combineTime(millisecs); private String combineTime(Decimal millisecs){ String result = ''; if(millisecs > 0){ Decimal dDays = millisecs/1000/60/60/24; Integer iDays = integer.valueOF(math.floor(dDays)); Decimal remainderDays = dDays- iDays; Decimal dHours = remainderDays * 24; Integer iHours = integer.valueOf(math.floor(dHours)); Decimal remainderHours = dHours - iHours; Decimal dMinutes = remainderHours * 60; Integer iMinutes = integer.valueOf(math.floor(dMinutes)); Decimal remainderMinutes = dMinutes - iMinutes; Decimal dSeconds = remainderMinutes * 60; Integer iSeconds = integer.valueOf(math.floor(dSeconds)); Decimal remainderSeconds = dSeconds - iSeconds; system.debug('*****************************************************'); system.debug('Days: ' + iDays+' - '+'Hours: ' + iHours+' - '+'Minutes: ' + iMinutes+' - '+'Seconds: ' + iSeconds); system.debug('*****************************************************'); result = String.valueOf(iHours).leftPad(2, '0'); result += ':'; result += String.valueOf(iMinutes).leftPad(2, '0'); result += ':'; result += String.valueOf(iSeconds).leftPad(2, '0'); result += '.000'; } return result; }
終わりに
日付時間の差分を求めるには、数式でも簡単にできる、しかし、その結果は60秒や60分になってしまう
繰り上げない問題点を簡単に解決できたら、いいな、公式関数もいずれか、対応してくれるようになるだろう