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".
的格式
我正在开发一个 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".
的格式