我的Android应用程序中有一个数据库,其日期格式如下:2012年7月4日的201274和2012年10月16日的20121016。我使用SimpleDateFormat显示数据库行的日期,以便今天它抓住日期20121016并显示2012-10-16。代码是这样的:
private void convertDBdate() {
convertDateTextView.setText(gotDt);
String dateStr = convertDateTextView.getText().toString();
SimpleDateFormat inputFormatter = new SimpleDateFormat("yyyyMd");
SimpleDateFormat outputFormatter = new SimpleDateFormat("yyyy-MM-dd");
try {
DBdate = inputFormatter.parse(dateStr);
dashDateStr = outputFormatter.format(DBdate);
convertFinalDateTV.setText(dashDateStr);
} catch (ParseException e ) {
e.printStackTrace();
}
使用此代码,201274显示为2012-07-04,但两位数月显示不正确,20121016显示为2012-01-16(1月16日)。问题在于MM和dd。我已经尝试了yyyy-M-dd作为输出日期格式,但是显示了2012-1-16(再次,1月16日)。
我是否必须以某种方式隔离M值并做那个月+ 1件事?如果是这样的话怎么写呢,它会去哪里?
我不想在2012年7月4日将数据库中的日期重新写入20120704,我希望能够在代码中修复它。
答案 0 :(得分:1)
您的问题不在于输入格式化程序应始终为yyyyMMdd,而有时它应该是yyyyMMdd
在201274的情况下,MM的输入格式将不适用,但在20121016的情况下,它将会适用。
您需要添加一些逻辑来解析输入的长度并选择适当的格式化程序。
在我提出一些逻辑之前,我需要提出两个问题
答案 1 :(得分:0)
这个项目可能要迟到,但对于未来的项目,我总是建议使用
Date.getTime()
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#getTime()
用于存储偶数日期,因为它将占用数据库中较少的空间,这将使排序更快,您只需避免现在遇到的问题。