Android SimpleDateFormat两个月的月份

时间:2012-10-16 16:54:18

标签: android simpledateformat

我的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,我希望能够在代码中修复它。

2 个答案:

答案 0 :(得分:1)

您的问题不在于输入格式化程序应始终为yyyyMMdd,而有时它应该是yyyyMMdd

在201274的情况下,MM的输入格式将不适用,但在20121016的情况下,它将会适用。

您需要添加一些逻辑来解析输入的长度并选择适当的格式化程序。

在我提出一些逻辑之前,我需要提出两个问题

  1. 您如何在数据库中代表2012-10-01?我想这是2012101,在这种情况下......
  2. 您如何区分2012111和2012111?即2012-11-01和2012-01-11

答案 1 :(得分:0)

这个项目可能要迟到,但对于未来的项目,我总是建议使用

Date.getTime()

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#getTime()

用于存储偶数日期,因为它将占用数据库中较少的空间,这将使排序更快,您只需避免现在遇到的问题。