DateTime不正确的月份以及如何在数据库中转换为dd / mm / yyyy

时间:2014-02-08 16:00:25

标签: android android-datepicker

我想让用户从DatePicker中选择一个日期并将其存储到数据库中,然后将其转换为dd / mm / yyyy格式。

        dp =(DatePicker)findViewById(R.id.DateActivity);
        setDate.setOnClickListener(new OnClickListener() 
        {
        @Override
        public void onClick(View v) {
            requestDate.setText("Day" + dp.getDayOfMonth() + " Month " + (dp.getMonth() + 1)+ " Year " + dp.getYear());
        }
    });

输出为Day 9 Month 2 Year 2014。 我选择的每个月的输出月数减少一个,所以我在这个月加1。为什么会这样? 但主要问题是如何将其转换为09022014并将其存储在数据库中?如果db的格式为dd / mm / yyyy,是否意味着它不接受我的输出?

2 个答案:

答案 0 :(得分:2)

对于您的第二个问题(将其放入数据库),您只需创建一个这样的字符串:

String todb = dp.getDayOfMonth() + "/" + (dp.getMonth() + 1)+ "/" + dp.getYear();

将返回类似09/21/2014的字符串。

现在,至于你的第一个问题(月份被一个人关闭),我认为这源于CalendarView.OnDateChangeListener。它说:

  

month设置为[0-11]的月份。

我敢打赌,这也是在DatePicker上实现的(或者您使用CalendarViewDatePicker),所以1月是0,12月是11。所以你将月份改为1的方式是完美的方法。

答案 1 :(得分:2)

java.util.Calendar将月份视为从零开始的列表,因此DatePicker也遵循此约定(请参阅DatePicker.init的文档)。令人困惑,但这就是Java的方式(至少目前为止)。像你一样添加1会很好。

至于转换日期,您可以使用SimpleDateFormat类来设置您喜欢的日期格式。对于你所说的,格式模式字符串将是"ddMMyyyy"。请参阅以下示例代码:

// Build Calendar object from DatePicker fields.
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, myDatePicker.getMonth());
cal.set(Calendar.DAY_OF_MONTH, myDatePicker.getDayOfMonth());
cal.set(Calendar.YEAR, myDatePicker.getYear());

// Convert date to desired format.
SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");
String dateString = sdf.format(cal.getTime());
int dateInt = Integer.parseInt(dateString); // if you want it as an int instead

您可能需要考虑将日期存储为20140209("yyyyMMdd",年 - 月 - 日)而不是为了排序目的,因为这自然会允许按时间顺序对其进行排序。