SimpleDateFormat 打印“。” MMM 格式
SimpleDateFormat print "." for MMM format
我正在尝试使用 SimpleDateFormat 将日期字符串从一种格式转换为另一种格式。
转换有效,但有一个点“。”一个月后
String dateStr = "04/02/1987";
DateFormat df1 = new SimpleDateFormat("dd/MM/yyyy");
Date d = df1.parse(dateStr);
DateFormat df2 = new SimpleDateFormat("dd MMM yyyy");
System.out.println(df2.format(d));
输出是 1987 年 2 月 4 日 而不是 1987 年 2 月 4 日.
创建对象时请在 SimpleDateFormat 构造函数中提供 Locale.ENGLISH,如下所示:
String dateStr = "04/02/1987";
DateFormat df1 = new SimpleDateFormat("dd/MM/yyyy");
Date d = df1.parse(dateStr);
DateFormat df2 = new SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH);
System.out.println(df2.format(d));
你的Locale.getDefault()
是什么?
字母数字日期部分的不同输出可能是由格式化程序使用的 Locale
引起的。在大多数情况下,如果您没有自己指定,系统默认值 Locale
会被使用。我不确定 SimpleDateFormat
是否这样做,但似乎有可能。
我知道 java.time.format.DateTimeFormatter
是这样做的,请参阅以下使用 java.time
的示例,现代的和推荐使用 datetime API:
public static void main(String[] args) {
String dateStr = "04/02/1987";
LocalDate localDate = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("dd/MM/yyyy"));
System.out.println(localDate.format(DateTimeFormatter.ofPattern("dd MMM yyyy",
Locale.ENGLISH)));
System.out.println(localDate.format(DateTimeFormatter.ofPattern("dd MMM yyyy",
Locale.FRENCH)));
}
输出:
04 Feb 1987
04 févr. 1987
关于月份的名称,输出(当然)是不同的,但是使用 Locale.FRENCH
会在缩写的月份名称后显示一个点。您的系统的默认 Locale
可能也是用点表示缩写的格式,但与数字部分 和 [= 的 Locale.ENGLISH
的输出格式相同33=]月份的缩写。
我正在尝试使用 SimpleDateFormat 将日期字符串从一种格式转换为另一种格式。 转换有效,但有一个点“。”一个月后
String dateStr = "04/02/1987";
DateFormat df1 = new SimpleDateFormat("dd/MM/yyyy");
Date d = df1.parse(dateStr);
DateFormat df2 = new SimpleDateFormat("dd MMM yyyy");
System.out.println(df2.format(d));
输出是 1987 年 2 月 4 日 而不是 1987 年 2 月 4 日.
创建对象时请在 SimpleDateFormat 构造函数中提供 Locale.ENGLISH,如下所示:
String dateStr = "04/02/1987";
DateFormat df1 = new SimpleDateFormat("dd/MM/yyyy");
Date d = df1.parse(dateStr);
DateFormat df2 = new SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH);
System.out.println(df2.format(d));
你的Locale.getDefault()
是什么?
字母数字日期部分的不同输出可能是由格式化程序使用的 Locale
引起的。在大多数情况下,如果您没有自己指定,系统默认值 Locale
会被使用。我不确定 SimpleDateFormat
是否这样做,但似乎有可能。
我知道 java.time.format.DateTimeFormatter
是这样做的,请参阅以下使用 java.time
的示例,现代的和推荐使用 datetime API:
public static void main(String[] args) {
String dateStr = "04/02/1987";
LocalDate localDate = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("dd/MM/yyyy"));
System.out.println(localDate.format(DateTimeFormatter.ofPattern("dd MMM yyyy",
Locale.ENGLISH)));
System.out.println(localDate.format(DateTimeFormatter.ofPattern("dd MMM yyyy",
Locale.FRENCH)));
}
输出:
04 Feb 1987
04 févr. 1987
关于月份的名称,输出(当然)是不同的,但是使用 Locale.FRENCH
会在缩写的月份名称后显示一个点。您的系统的默认 Locale
可能也是用点表示缩写的格式,但与数字部分 和 [= 的 Locale.ENGLISH
的输出格式相同33=]月份的缩写。