Единственное решение этой проблемы, которое действительно работает правильно, было первоначально размещено на http://mindfiresfdcprofessionals.wordpress.com/2013/10/25/how-to-dispaly-locale-formatted-datetime-in-visual-force/. Я публикую нижеприведенный код на случай, если ссылка внезапно исчезнет:
Вы должны создать новый компонент VF с именем LocaleDate
:
<apex:component access="global" controller="LocaleDateController">
<apex:attribute assignTo="{!dateValue}" description="The Date value to be rendered based upon the user's
locale" name="date_Value" type="Date"></apex:attribute>
{!TimeZoneValue}
</apex:component>
Контроллер:
public with sharing class LocaleDateController {
public Date dateValue{get;set;}
public String getTimeZoneValue() {
if( dateValue != null ) {
String localeFormatT = dateValue.format();
return localeFormatT;
}
return null;
}
}
А затем используйте такой компонент:
<c:LocaleDate date_Value="{!TODAY()}"/>
Работает с любым введенным вами значением даты, необязательно с полем sObject. Вся идея основана на том факте, что функция Date.format()
создает строку на основе локали текущего пользователя. Таким же образом можно создавать контроллеры-оболочки для типов данных DateTime и Decimal.