Каким будет шаблон даты и времени в локали nl_NL этого? - PullRequest
0 голосов
/ 29 декабря 2011

В моем проекте я использую преобразование даты следующим образом (для краткости я взял только соответствующий фрагмент)

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;


public class FormatTest {

    public static void main(String[] args) {
        try {
            String destinationDateFormat = "MM/dd/yyyy HH:mm:ss";
            String sourceDateFormat = "EEE MMM d HH:mm:ss z yyyy";
            String dateString = "2011-12-20T00:00:00+00:00";

            DatatypeFactory factory = DatatypeFactory.newInstance();

            XMLGregorianCalendar cal = factory.newXMLGregorianCalendar(dateString);
            Calendar gCal = cal.toGregorianCalendar();
            Date convertedDate = gCal.getTime();
            SimpleDateFormat sdf = new SimpleDateFormat(sourceDateFormat);
            if (convertedDate != null) {
                String convertedDateString = new SimpleDateFormat(destinationDateFormat).format(sdf.parse(
                            convertedDate.toString()).getTime());

                System.out.println("Final Date :" + convertedDateString);
            }       

        } catch (DatatypeConfigurationException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }



    }

}

В моем проекте переменные destinationDateFormat и sourceDateFormat читаются из файла свойств пружины. Приведенный выше код прекрасно работает в коробках Unix, где языковой стандарт системы установлен как en_US или en_GB , но один из тестовых блоков имеет языковой стандарт nl_NL , и именно здесь приведенный выше код не дает ParseException. Проблема в том, что sourceDateFormat не разбирается в локали nl_NL.

Кто-нибудь может мне подсказать, какой должен быть соответствующий sourceDateFormat в nl_NL локаль?

Я не хочу менять код Java, так как это дорого.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

Символы формата даты для en_US:

GyMdkHmsSEDFwWahKzZ

Символы формата даты для nl_NL:

GyMdkHmsSEDFwWahKzZ

Нет никакой разницы. Я получил символы формата даты, выполнив следующие строки Java:

System.out.println(DateFormatSymbols.getInstance
        (new Locale("en_US")).getLocalPatternChars());
System.out.println(DateFormatSymbols.getInstance
        (new Locale("nl_NL")).getLocalPatternChars());

Я оставил исходный формат даты тем же:

String sourceDateFormat = "EEE MMM d HH:mm:ss z yyyy";

и изменил ваше простое утверждение формата даты следующим образом:

SimpleDateFormat sdf = new SimpleDateFormat(sourceDateFormat,
        new Locale("nl_NL"));

С этим простым изменением формата даты ваш тестовый код работал нормально и дал следующие результаты в восточном часовом поясе США:

Date string: 2011-12-20T00:00:00+00:00
Final Date:  12/19/2011 19:00:00
0 голосов
/ 29 декабря 2011

Похоже, что это может быть: EEEE, MMMM d, yyyy h:mm:ss a z

Я написал небольшой класс, чтобы получить его:

    DateFormat f = getDateTimeInstance(FULL, FULL, new Locale("nl_NL"));
    SimpleDateFormat sf = (SimpleDateFormat) f;
    String p1 = sf.toPattern();
    String p2 = sf.toLocalizedPattern();

    System.out.println( p1 );
    System.out.println( p2 );

Получено из этого SO ответа .

...