Workarounds for Missing Apex Time.format() Instance Method

Calling results in ’28/08/2012 16:20′ for current user locale ‘French (France)’ & ‘8/28/2012 4:20 PM’ for current user locale ‘English (United States)’.

Calling results in ’28/08/2012′ for current user locale ‘French (France)’ & 8/28/2012 for current user locale ‘English (United States)’.

Ideally a Time.format() instance method would exist so that results in ’16:20′ for current user locale ‘French (France)’ & ‘4:20 PM’ for current user locale ‘English (United States)’.

Please suggest any and all locale sensitive workarounds for formatting the Time part only.

In my particular case, I’m not displaying this Time part only to the user via Visualforce, so an Apex workaround is what I’m looking for.


You could just split the DateTime format() result on the first space – does that give you what you’re looking for?

public String myDateFormat(DateTime dt) {
    String[] parts = dt.format().split(' ');
    return (parts.size() == 3) ? (parts[1] + ' ' + parts[2]) : parts[1]; 


6:38 PM

for me in English (United States), and


in French(France).


As tomlogic points out, the above method is not very robust – some locales may include spaces in the date or time portion of the format, and the ordering is not consistent. This second attempt assumes that the date and time are separated by zero or more spaces, but handles spaces within the two portions, and either ordering of date and time. The only assumption made is that the formatted Date is contained within the formatted Time:

public String myDateFormat(DateTime dt) {
    return dt.format().replace(, '').trim();

Seems to work fine for Hebrew, Vietnamese & Korean, as well as English and French.

Source : Link , Question Author : mjgallag , Answer Author : Community

Leave a Comment