Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有短日期模式的java本地化日期_Java_Date - Fatal编程技术网

具有短日期模式的java本地化日期

具有短日期模式的java本地化日期,java,date,Java,Date,有关以下代码: public class DateFormatTest { @Test public void shouldTestDateFormat() { DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()); System.out.println(df.format(new Date())); df = Da

有关以下代码:

public class DateFormatTest {

    @Test
    public void shouldTestDateFormat()  {

        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
        System.out.println(df.format(new Date()));

        df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMANY);
        System.out.println(df.format(new Date()));
    }
}
输出为:

2/1/16
01.02.16
如何获得下面的输出而不是前面的输出:

2/1/2016
01.02.2016
注:短日期的区域设置为:英语(美国),MM/dd/yyyy

当我更改区域设置而不是短日期模式时,我需要上面的输出。我不需要关心世界上所有的模式。该代码模拟区域设置的更改:

    localize(Locale.getDefault());
    localize(Locale.GERMANY);

private void localize(Locale locale) {
    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
    System.out.println(df.format(new Date()));
}

您可以自己创建格式字符串:

DateFormat df = new SimpleDateFormat("M/d/yyyy");
System.out.println(df.format(new Date()));

df = new SimpleDateFormat("dd.MM.yyyy");
System.out.println(df.format(new Date()));
使用这些格式字符串(
M/d/yyyy
dd.MM.yyyy
),您可以根据自己的意愿定义输出

在这种情况下:

  • d
    显示不带前导0的月份日期
  • dd
    显示以0开头的月份
  • M
    MM
    相当于
    d
    dd
    显示月份
  • yyyy
    以4位数字的形式显示年份
使用
SimpleDataFormat

输出

Current Date: 2/1/2016
Current Date: 01.02.2016

下面的代码不能保证工作,但不幸的是,这是我所知道的唯一方法,它可以与Oracle的Java7&8实现一起工作。如果不起作用,它将打印一个2位数的年份

private static void printLocalizedDate(Locale locale) {
    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
    if (df instanceof SimpleDateFormat)
        df = new SimpleDateFormat(
                ((SimpleDateFormat) df).toPattern().replace("yy", "yyyy")
        );
    System.out.println(df.format(new Date()));
}

    printLocalizedDate(Locale.getDefault());
    printLocalizedDate(Locale.GERMANY);

我无法模拟区域设置的变化。我不需要跟踪世界上所有的模式。我只需要更改区域设置。
private static void printLocalizedDate(Locale locale) {
    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
    if (df instanceof SimpleDateFormat)
        df = new SimpleDateFormat(
                ((SimpleDateFormat) df).toPattern().replace("yy", "yyyy")
        );
    System.out.println(df.format(new Date()));
}

    printLocalizedDate(Locale.getDefault());
    printLocalizedDate(Locale.GERMANY);