String expiryDate = "2016-03-14";
private String formatDateTime(String expiryDate, String expiryTime) {
SimpleDateFormat input = new SimpleDateFormat("yyyy-mm-dd");
SimpleDateFormat output = new SimpleDateFormat("MMM, dd, yyyy");
try {
String formattedDate = output.format(input.parse(expiryDate ));// parse input
return formattedDate + ", " + expiryTime;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
然而,当它返回时,它将于2016年1月14日发布。
所需的输出是Mar,14,2016
答案 0 :(得分:6)
mm
应为大写MM
。因为
mm 代表分钟 MM 代表月
所以你的格式应该是
SimpleDateFormat input = new SimpleDateFormat("yyyy-MM-dd");
答案 1 :(得分:3)
mm表示分钟,因此当您使用mm时,它将打印分钟而不是月份。
虽然MM代表几个月。您需要添加如下:
SimpleDateFormat input = new SimpleDateFormat("yyyy-MM-dd");
答案 2 :(得分:2)
SimpleDateFormat input = new SimpleDateFormat("yyyy-mm-dd");
应该是
SimpleDateFormat input = new SimpleDateFormat("yyyy-MM-dd");
mm应为MM
答案 3 :(得分:1)
SimpleDateFormat input = new SimpleDateFormat("yyyy-mm-dd");
需要在上述声明中进行更正,如下所示:
SimpleDateFormat input = new SimpleDateFormat("yyyy-MM-dd");
使用MM代替mm,因为MM用于月份,而mm用于分钟。
答案 4 :(得分:1)
java.text.SimpleDateFormat
内部调用java.util.Locale
,它实际实现了日期时间和区域格式模式。因此,Locale
MM 定义为月, mm 分钟。所以,使用
SimpleDateFormat input = new SimpleDateFormat("yyyy-mm-dd");
将无法匹配任何模式,因此默认情况下,月份将设置为默认值1
。它显示给Jan
而不是Mar
(实际上是你期待的)。
使用 MM 代表Month。它将解决您的问题。
SimpleDateFormat input = new SimpleDateFormat("yyyy-MM-dd");
答案 5 :(得分:1)
您的问题已经回答,其他答案都是正确的。我想提供你方法的现代版本。
private static DateTimeFormatter output
= DateTimeFormatter.ofPattern("MMM, dd, yyyy", Locale.ENGLISH);
private static String formatDateTime(String expiryDate, String expiryTime) {
String formattedDate = LocalDate.parse(expiryDate).format(output);
return formattedDate + ", " + expiryTime;
}
当我使用expiryDate
2016-03-14
调用此方法时,我会按预期返回Mar, 14, 2016
。
你正在使用的SimpleDateFormat
(以及其他答案也使用)不仅已经过时了,而且也是出了名的麻烦。我建议你忘记它,而是使用现代Java日期和时间API java.time
。与它合作非常好。
您的输入格式2016-03-14
与ISO 8601一致,即现代类解析为默认格式,即没有任何明确的格式化程序。所以甚至没有机会在格式模式字符串中弄错MM
的情况。
链接: Oracle tutorial: Date Time解释如何使用java.time
。