我有一个Book Class,其中一个属性是:
private Calendar publish_date;
现在我想在library.xml文件中插入一本新书。所以我创作了一本书:
Book b = new Book();
b.setPublish_date(new GregorianCalendar(1975, 5, 7));
我需要将该日期作为String,以便我可以将其写入XML文件(使用DOM)。所以我执行:
Element publish_date = doc.createElement("publish_date");
SimpleDateFormat formatter=new SimpleDateFormat("yyyy MM DD");
publish_date.appendChild(doc.createTextNode(formatter.format(b.getPublish_date())));
book.appendChild(publish_date);
但这是错误:
java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(DateFormat.java:301)
at java.text.Format.format(Format.java:157)
at fileLock.FileLock.updateLibrary(FileLock.java:127)
at fileLock.FileLock.main(FileLock.java:63)
那么将Calendar(Gregorian Calendar)转换为字符串的正确方法是什么?感谢
答案 0 :(得分:3)
SimpleDateFormat
无法格式化GregorianCalendar
;它可以格式化Date
,因此请先将其转换为Date
。您今天收到158
,因为DD
是一年中的某一天,但dd
(小写)是一个月中的某一天。
SimpleDateFormat formatter=new SimpleDateFormat("yyyy MM dd"); // lowercase "dd"
publish_date.appendChild(doc.createTextNode(formatter.format(
b.getPublish_date().getTime() )));
此外,您可能已经知道,您可能不知道,但Java中的月份数为0-11,因此格式化时,月5
为6月,因此它显示为06
。
输出:
1975 06 07
答案 1 :(得分:2)
您需要使用Calendar#getTime才能获得SimpleDateformat
的正确参数publish_date.appendChild(doc.createTextNode(
formatter.format(b.getPublish_date().getTime())));