【问题标题】:What will be the date-time pattern in nl_NL locale of this?nl_NL 语言环境中的日期时间模式是什么?
【发布时间】:2012-01-30 00:24:05
【问题描述】:

在我的项目中,我使用如下日期转换(为简洁起见,我只取了相关的块)

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();
        }



    }

}

在我的项目中,变量destinationDateFormatsourceDateFormat 是从弹簧属性文件中读取的。上面的代码在系统语言环境设置为 en_USen_GB 的 unix 框中工作正常,但其中一个测试框具有 nl_NL 语言环境和这就是上面的代码没有给出 ParseException 的地方。问题是 sourceDateFormat 在 nl_NL 语言环境中不可解析。

谁能建议我在 nl_NL 语言环境中对应的 sourceDateFormat 应该是什么?

我不想更改java代码,因为它很昂贵。

【问题讨论】:

  • 如果 Java 代码做了一些愚蠢的事情,比如双重转换,它应该被改变。权宜之计不会有帮助(当人们在这里问这些问题时,我个人觉得很累,因为它们只是对自己有帮助)。
  • 我完全同意你的看法。但是你知道,在拥有不同技能的人的大型 IT 项目中,会发生这样的事情。但我一直在为当前的生产版本寻找一种解决方法。当然,此代码将在下一个版本中得到修复和重构。

标签: java unix datetime locale


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看起来可能是这样: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 );
    

    源自this SO answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-23
      • 2013-07-23
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      相关资源
      最近更新 更多