【问题标题】:How to get day, month and year from DatePickerDialog?如何从 DatePickerDialog 获取日、月和年?
【发布时间】:2012-07-25 15:57:19
【问题描述】:

我想获取保存到数据库的日、月和年值。这些是我的代码:

声明:

private TextView tv_purchase_date;
private Button mPickDate;
private int mYear;
private int mMonth;
private int mDay;
OnClickListener listener_show_dlg = null;
OnDateSetListener listener_mdate_display = null;

事件代码:

listener_show_dlg = new OnClickListener() {                 
        public void onClick(View v) {
            Calendar cal=Calendar.getInstance();

            DatePickerDialog datePickDlg = new DatePickerDialog(
                    ItemsAddActivity.this,
                    listener_mdate_display,
                    cal.get(Calendar.YEAR),
                    cal.get(Calendar.MONTH),
                    cal.get(Calendar.DAY_OF_MONTH)
            );
            datePickDlg.show(); 
        };
    };


listener_mdate_display = new OnDateSetListener() {
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            mMonth = month;
                            mYear = year;
                            mDay = dayofMonth;

            tv_purchase_date.setText(dayOfMonth + "/" + monthOfYear + "/" + year);  

        }
    };
}

我尝试将 mMonth、mYear 和 mDay 值存储在 db 中。最好的商店类型是什么?整数还是字符串??

【问题讨论】:

  • 那是什么,dayOfMonth?
  • 你的意思是'星期一','星期二'...
  • 例如:今天是25(天),07(月),2012(年)。我无法获得天数...
  • 我把 dayofmonth 给我弄糊涂了。对不起,伙计们。我弄错了。
  • 那么如何将这些值存储在数据库中?作为字符串还是作为整数?最好的方法是什么??

标签: android datepickerdialog


【解决方案1】:

我在数据库中存储一个代表日期的数字。它是自现代时代开始(1970 年 1 月 1 日)以来经过的秒数。从日期选择器中,您可以像这样获得 M D Y 值:

        datePickerListener = new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int yearOfYear,
                int monthOfYear, int dayOfMonth) {
            // the user has picked these values
            year = yearOfYear;
            month = monthOfYear;
            day = dayOfMonth;

然后,我将它们变成这样的单个 Date 对象。

                Calendar cal = new GregorianCalendar(year, month, day);
            Date dateOfGames = cal.getTime();
            DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
            String cs = df.format(dateOfGames);
            changeDateButton.setText(cs); // update the interface

        }
    };

在我把它放入数据库之前,我把它变成了这样的秒数:

长秒 = date.getTime() / 1000; // 这是自纪元开始以来的日期,以秒为单位

....

当我从数据库中取出那几秒,并希望它再次成为 Date 对象时,我会这样做:

日期 = 新日期(秒 * 1000); // 将秒转换为 Date 对象

您可以使用 DateFormat 对象以您喜欢的方式显示日期对象。

我知道这很尴尬。由于 SQLite 不允许您存储日期,因此答案会很尴尬。也许有比这更干净的方法,其他人会推荐一些东西。 :)

【讨论】:

    【解决方案2】:

    我在这个问题上挣扎了一段时间。我不知道有什么比这更好的了。

    我将日期作为单个 long int 存储在数据库中。将您的 Date 转换为自纪元(1970 年 1 月 1 日)以来的秒数非常容易,也很容易将秒数转换为 Date 对象。

    您需要注意秒和毫秒。

    日期 = 新日期(秒 * 1000); // 将秒转换为日期

    秒 = date.getTime() / 1000; // 这是自纪元开始以来的日期,以秒为单位

    // 使用 Greg 日历从日、月、年获取 Date 对象

    日期 dateOfGames = new GregorianCalendar(year, month, day).getTime();

    这有帮助吗?

    【讨论】:

    • 年:2012,月:7,日:25..如何将这些值存储为整数。作为三个 Integer db 字段或一个 Integer Field ???
    • 我只用了一个。然后当我将它从数据库中取出时,将该数字重新创建为日期。我想我使用的是 long,而不是 int。
    • 嗯。如何与 longint 分开以及如何从日期值中加入。可以举个例子吗?
    【解决方案3】:

    我用这个 sql 字符串创建了 sqllite 表:

    create table items (id INTEGER PRIMARY KEY AUTOINCREMENT, pdate DATE)
    

    我写了一些转换日期的方法:

    public String date_to_str(Date date) {      
        String pattern = "dd.MM.yyyy";
        SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
        Log.d(_watcher_name, "date_to_str" + dateFormat.format(date));
        return dateFormat.format(date);     
    }
    
    public Date mdy_to_date (int day, int month, int year) {
        Calendar cal = new GregorianCalendar(year, month, day);
        return cal.getTime();       
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      相关资源
      最近更新 更多