Android :将日历中的日期、时间选择器中的数据转换为 sql 时间戳并反转。

Android : Converting data from date,time picker from Calendar to sql Timestamp and reverse.

我正在开发一个 Android 应用程序,我想在其中保留用户在 java.sql.timestamp 中输入的日期和时间并保存。当再次显示给用户时,我想将其分别转换回 "dd-MM-YYYY" 和 "HH:MM" 格式。我设法将从用户收到的条目设置为单独变量中的年、月、日、小时、分钟,甚至尝试获取时间,但 Calendar 实例总是 returns 我当前的日期和时间。我不知道我做错了什么。请告诉我。

Android代码:

 Button menuStartDate, menuStartTime;
 EditText startDateTextField, startTimeTextField;
    int monthOfYear, dayOfWeek, hourOfADay, minuteOfHour, year;
private Calendar startCalendar;
 @Override
    public void onClick(View view) {
        if (view == menuStartDate) {

            startCalendar = Calendar.getInstance();
            year = startCalendar.get(Calendar.YEAR);
            monthOfYear = startCalendar.get(Calendar.MONTH);
            dayOfWeek = startCalendar.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog datePickerDialog = new DatePickerDialog(this,
                    new DatePickerDialog.OnDateSetListener() {
                        @Override
                        public void onDateSet(DatePicker view, int year,
                                              int monthOfYear, int dayOfMonth) {
                            startDateTextField.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);

                        }
                    }, year, monthOfYear, dayOfWeek);
            datePickerDialog.show();
            startCalendar.set(Calendar.MONTH, monthOfYear);
            startCalendar.set(Calendar.YEAR, year);
            startCalendar.set(Calendar.DAY_OF_MONTH, dayOfWeek);

        }
        if (view == menuStartTime) {

            startCalendar = Calendar.getInstance();
            hourOfADay = startCalendar.get(Calendar.HOUR_OF_DAY);
            minuteOfHour = startCalendar.get(Calendar.MINUTE);

            TimePickerDialog timePickerDialog = new TimePickerDialog(this,
                    new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker view, int hourOfDay,
                                              int minute) {
                            startTimeTextField.setText(hourOfDay + ":" + minute);
                        }
                    }, hourOfADay, minuteOfHour, false);
            timePickerDialog.show();
            startCalendar.set(Calendar.HOUR_OF_DAY, hourOfADay);
            startCalendar.set(Calendar.MINUTE, minuteOfHour);
        }

正如你在上面的例子中看到的,我正在从用户那里获取信息,并进行设置。不幸的是,我无法获得用户在日历中设置的时间。这是转换代码:

if(view == submitMenuButton){
            MenuCard menuCard = new MenuCard();
            if(!(startDateTextField.getText().toString().length()<1)){
                    if(!(startTimeTextField.getText().toString().length()<1)){
                        Timestamp timestamp = new Timestamp(startCalendar.getTimeInMillis());
                        Log.d("TImestamp is",timestamp.toString());

                    } else {
                        startTimeTextField.setError("Please select start time");
                    }
            }else {
                startDateTextField.setError("Please select start date");

            }
        }

我做错了什么?你能帮忙的话,我会很高兴。谢谢

这是设置 DatePickerDialog 的日期的方法:

final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);

DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
  @Override
  public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    // dd.MM.yyyy
    register_textview_birthday.setText(dayOfMonth + "." + (monthOfYear + 1) + "." + year);
  }
}, mYear, mMonth, mDay);
datePickerDialog.show();

以及检索它的代码 java.util.Date:

public static Date stringToDate(String string, final String format, final Locale locale) throws ParseException {
  ThreadLocal formater = new ThreadLocal() {
    protected SimpleDateFormat initialValue() {
      return new SimpleDateFormat(format, locale);
    }
  };
  return ((SimpleDateFormat)formater.get()).parse(string);
}

Date date = stringToDate(register_textview_birthday.getText().toString().trim(), "dd.MM.yyyy", Locale.ENGLISH);

现在您可以将 java.util.Date 转换为 sql 时间戳。 根据您的更改日期格式和语言环境。

当心 SimpleDateFormat 不是线程安全的。 所以像我在上面的代码中那样使用 TreadLocal。

对于时间:将 DatePicker 中的日期字符串附加到 TimerPicker 中的时间字符串,并将格式更改为类似 "dd.MM.yyyy HH:mm".

的格式