Вот рабочий пример, основанный на вашем коде: -
, который использует классы Calendar и SimpleDateFormat для сохранения даты и времени в одном столбце как в виде long (более эффективный способ, т. Е. Занимает меньше места), так и в виде String. ОБА совместимы с функциями SQLite Дата и время , поэтому манипуляции с датой и временем очень просты, так как возвращение даты и времени происходит практически в любом формате.
База данныхПомощь
public class DBHelper extends SQLiteOpenHelper {
public static final String DBNAME = "mydb";
public static final int DBVERSION = 1;
public static final String table_Rdv = "rdv";
public static final String ID_R = BaseColumns._ID;
public static final String TITRE = "titre";
public static final String DATE_R ="date_r";
public static final String HEURE_R = "heure_r";
public static final String ID_F = "id_f";
public static final String DATETIMELONG = "datetimelong";
public static final String DATETIMESTRING = "datetimestring";
public DBHelper(Context context) {
super(context, DBNAME, null, DBVERSION);
this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE_RDV = "CREATE TABLE " + table_Rdv + " (" +
ID_R + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
TITRE + " VARCHAR NOT NULL, " +
DATE_R+ " Date NOT NULL, " + //<<<<<<<<<< Column Not needed
HEURE_R+ " Time NOT NULL, " + //<< Column not needed
// Note only one of the two following columns are needed
// Using SQLite date and time functions you can do very much what you want
// see https://www.sqlite.org/lang_datefunc.html
DATETIMELONG + " INTEGER, " + //<<<<<<<<<< Column will hold both date and time as long
DATETIMESTRING + " TEXT, " + //<<<<<<<<<< Column will hold both date and time as String YYYY-MM-DD HH:MM
ID_F+ " INTEGER NOT NULL " +
//", CONSTRAINT FK1 FOREIGN KEY ( " + ID_F + ") REFERENCES "+ table_Femme + "("+ID_F+") " + // Commented out for demo
")";
db.execSQL(CREATE_TABLE_RDV);
}
public long addRDVRow(String titre, long datetimelong, String datetimestring) {
ContentValues cv = new ContentValues();
cv.put(TITRE,titre);
cv.put(DATE_R,"NOTHING NEEDED HERE AS NOT USED");
cv.put(HEURE_R,"NOTHING NEEDED HERE AS NOT USED");
cv.put(DATETIMELONG,datetimelong);
cv.put(DATETIMESTRING,datetimestring);
cv.put(ID_F,0); //<<<<<<<<<< as no fk constraint anything will do for demo so 0
SQLiteDatabase db = this.getWritableDatabase();
return db.insert(table_Rdv,null,cv);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Активность: -
public class MainActivity extends AppCompatActivity {
CalendarView cv;
TimePickerDialog timepicker;
TextView showtime;
TextView showdatetime; //<<<<<<<<<< ADDED for demo
Button btn_ajouter;
Calendar cal;
SimpleDateFormat sdfFull = new SimpleDateFormat("yyyy-MM-dd HH:mm");
SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm");
int mYear,mMonth,mDay,mHour,mMin;
DBHelper mDBHlpr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDBHlpr = new DBHelper(this);
cv = this.findViewById(R.id.cv);
cal = Calendar.getInstance();
showtime = this.findViewById(R.id.showtime);
showdatetime = this.findViewById(R.id.showdatetime);
btn_ajouter = this.findViewById(R.id.btn_ajouter);
handleDateTime(); // set to show current date time
handleDate(); // Handle the Calendar View
handleTime(); // Handle the TimePicker
btn_ajouter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDBHlpr.addRDVRow("Whatever",cal.getTimeInMillis(),sdfFull.format(cal.getTime())); //<<<<<<<<<< Add new row to db
//for demonstration
DatabaseUtils.dumpCursor(
mDBHlpr.getWritableDatabase().query(
DBHelper.table_Rdv,
null,null,null,null,null,null
)
);
}
});
}
public void handleDate() {
cv.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
mYear = year;
mMonth = month;
mDay = dayOfMonth;
handleDateTime();
}
});
}
public void handleTime() {
showtime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timepicker = new TimePickerDialog(v.getContext(), new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHour = hourOfDay;
mMin = minute;
handleDateTime();
}
},mHour,mMin,true);
timepicker.setTitle("Pick Time");
timepicker.show();
}
});
}
private void handleDateTime() {
cal.set(mYear,mMonth,mDay,mHour,mMin);
showtime.setText(sdfTime.format(cal.getTime()));
showdatetime.setText(sdfFull.format(cal.getTime()) + " or as long " + String.valueOf(cal.getTimeInMillis())); // SQL YYYY-MM-DD HH:MM format
}
}
Результат
Приложение выглядит так: -
![enter image description here](https://i.stack.imgur.com/7tdZl.png)
После нажатия кнопки «ОК» в TextViews отобразится: -
![enter image description here](https://i.stack.imgur.com/2G0vi.png)
После нажатия кнопки затем строка добавляется и отображается в журнале, например, (2-й ряд, первый был добавлен ранее)
05-01 11:17:40.282 23152-23152/q.so55927409 I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@a40a2ab
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: 0 {
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: _id=1
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: titre=Whatever
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: date_r=NOTHING NEEDED HERE AS NOT USED
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: heure_r=NOTHING NEEDED HERE AS NOT USED
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: datetimelong=-125838902353924
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: datetimestring=2019-05-16 15:20
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: id_f=0
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: }
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: 1 {
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: _id=2
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: titre=Whatever
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: date_r=NOTHING NEEDED HERE AS NOT USED
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: heure_r=NOTHING NEEDED HERE AS NOT USED
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: datetimelong=-125838880753924
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: datetimestring=2019-05-16 21:20
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: id_f=0
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: }
05-01 11:17:40.283 23152-23152/q.so55927409 I/System.out: <<<<<