0

我的 Android 应用程序中有一个数据库,其日期格式如下:201274 表示 2012 年 7 月 4 日,20121016 表示 2012 年 10 月 16 日。我使用 SimpleDateFormat 显示 DB 行的日期,以便今天它获取日期 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,我希望能够在代码中修复它。

4

2 回答 2

1

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

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

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

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

  1. 您如何在数据库中表示 2012-10-01?我猜它是 2012101 在这种情况下......
  2. 如何区分 2012111 和 2012111?即 2012-11-01 和 2012-01-11
于 2012-10-16T17:05:08.293 回答
0

也许这个项目迟到了,但对于未来的项目,我总是建议使用

日期.getTime()

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

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

于 2012-10-16T17:21:17.697 回答