我有这种格式的日期(2012-11-17T00:00:00.000-05:00)。我需要将日期转换为这种格式mm / yyyy。
我试过这种方式,但我得到了这个例外。
Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at DateParser.main(DateParser.java:14)
请参阅下面的代码:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateParser {
public static void main(String args[]) {
String MonthYear = null;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm/yyyy");
String dateformat = "2012-11-17T00:00:00.000-05:00
MonthYear = simpleDateFormat.format(dateformat);
System.out.println(MonthYear);
}
}
答案 0 :(得分:62)
DateFormat.format
仅适用于Date
值。
您应该使用两个SimpleDateFormat对象:一个用于解析,另一个用于格式化。例如:
// Note, MM is months, not mm
DateFormat outputFormat = new SimpleDateFormat("MM/yyyy", Locale.US);
DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX", Locale.US);
String inputText = "2012-11-17T00:00:00.000-05:00";
Date date = inputFormat.parse(inputText);
String outputText = outputFormat.format(date);
编辑:请注意,您可能希望以格式指定时区和/或区域设置,并且还应考虑使用Joda Time而不是所有这些来开始 - 这是一个更好的日期/时间API。
答案 1 :(得分:4)
你有一个DateFormat
,但你需要两个:一个用于输入,另一个用于输出。
你有一个输出,但我没有看到任何符合你输入的东西。当您将输入字符串赋予输出格式时,您会看到该异常并不奇怪。
DateFormat inputDateFormat = new SimpleDateFormat("yyyy-MM-ddhh:mm:ss.SSS-Z");
答案 2 :(得分:4)
SimpleDateFormat.format(...)
将Date作为参数并将Date格式化为String。所以你需要仔细看看API
答案 3 :(得分:3)
我想贡献现代的答案。 SimpleDateFormat
类非常麻烦,尽管在六年半前提出这个问题时可以合理地解决它,但是今天我们在java.time,现代Java日期和时间API。 SimpleDateFormat
及其朋友Date
现在被认为已经过时了,因此不再使用它们。
DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MM/uuuu");
String dateformat = "2012-11-17T00:00:00.000-05:00";
OffsetDateTime dateTime = OffsetDateTime.parse(dateformat);
String monthYear = dateTime.format(monthFormatter);
System.out.println(monthYear);
输出:
11/2012
我正在利用这样一个事实:您的字符串采用国际标准ISO 8601格式,并且java.time类将这种格式解析为默认格式,即没有任何显式格式化程序。其他答案怎么说,您需要先解析原始字符串,然后将生成的日期时间对象格式化为新字符串。通常这需要两个格式化程序,只有在这种情况下,我们很幸运,并且只能使用一个格式化程序。
SimpleDateFormat.format
也不能接受String
自变量,即使参数类型声明为Object
也是如此。mm/yyyy
中也存在一个错误。每小时的小写mm
操作系统。您一个月需要大写的MM
。m
中使用小写的monthYear
(同样因为java.time包含一个MonthYear
类,且其大写字母{ {1}},以免造成混淆。答案 4 :(得分:2)
我已经解决了这个问题
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class DateParser {
public static void main(String args[]) throws Exception {
DateParser dateParser = new DateParser();
String str = dateParser.getparsedDate("2012-11-17T00:00:00.000-05:00");
System.out.println(str);
}
private String getparsedDate(String date) throws Exception {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US);
String s1 = date;
String s2 = null;
Date d;
try {
d = sdf.parse(s1);
s2 = (new SimpleDateFormat("MM/yyyy")).format(d);
} catch (ParseException e) {
e.printStackTrace();
}
return s2;
}
}
答案 5 :(得分:0)
public static String showDate(){
SimpleDateFormat df=new SimpleDateFormat("\nTime:yyyy-MM-dd HH:mm:ss");
System.out.println(df.format(new Date()));
String s=df.format(new Date());
return s;
}
我认为此代码可以解决您的问题。
答案 6 :(得分:0)
这对我有用:
String dat="02/08/2017";
long date=new SimpleDateFormat("dd/MM/yyyy").parse(dat,newParsePosition(0)).getTime();
java.sql.Date dbDate=new java.sql.Date(date);
System.out.println(dbDate);