Bea*_*ear 0 java debugging calendar
这是我的目标格式:
2011年8月19日
我尝试通过以下代码将此字符串转换为Calendar对象,但变量"date"保持为null.
SimpleDateFormat formatter ;
Date date = null ;
formatter = new SimpleDateFormat("dd MMM yyyy");
try {
date = formatter.parse(returnDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal=Calendar.getInstance();
cal.setTime(date);
Run Code Online (Sandbox Code Playgroud)
有谁知道出了什么问题?谢谢.
仅供参考,例外消息:
无法解析的日期:"java 2011年8月19日"java.text.DateFormat.parse(未知来源)
但我不认为它有用......
解析出了问题.由于这个原因你没有发现它:
catch (ParseException e) {
}
Run Code Online (Sandbox Code Playgroud)
这基本上是在说,"我不在乎出了什么问题 - 忽略它." 在最起码你应该记录错误,更可能让异常泡沫了.
例外是一个非常重要的诊断工具 - 不要只是抓住它们而忽略它们.
编辑:现在问题已经改变,我们可以看到异常 - 但代码仍在继续,好像什么也没发生.即使您确实希望忽略异常,也需要确定解析失败时希望 date获得的值.显然null是无益的-所以你需要要么让异常冒泡(让对方有解析失败)或返回一些差异值(例如默认的日期或今天,或者类似的东西).
现在,正如它发生的那样,让异常泡沫化也会使代码变得更简单.它不会在我的机器上引发异常,但也许它会在你的机器上:
import java.util.*;
import java.text.*;
public class Test {
public static void main(String[] args) throws Exception {
Calendar cal = parseReturnDate("19 AUG 2011");
System.out.println(cal);
}
public static Calendar parseReturnDate(String returnDate)
throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy");
Date date = formatter.parse(returnDate);
Calendar cal=Calendar.getInstance();
cal.setTime(date);
return cal;
}
}
Run Code Online (Sandbox Code Playgroud)
注意我们不需要单独声明变量来分配它们的值,现在我们让异常冒泡,我们可以直接分配date它的有用值.
我的猜测是你的默认时区不使用"AUG"作为短月份名称 - 但是如果没有看到异常我就无法告诉你.如果是这种情况,您可能希望在构造格式化程序时指定语言环境:
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy",
Locale.US);
Run Code Online (Sandbox Code Playgroud)
您可能还想指定时区.
(顺便说一下,Joda Time是一个非常优秀的日期和时间处理API.如果你之后正在做任何重要的工作,我绝对建议在Date/上使用它Calendar.)
| 归档时间: |
|
| 查看次数: |
3255 次 |
| 最近记录: |