在android sqlite中插入日期时间值

在android sqlite中插入日期时间值,android,sqlite,datetime,datepicker,android-sqlite,Android,Sqlite,Datetime,Datepicker,Android Sqlite,在sqlite数据库中插入一些日期时间值时遇到问题 我有两个日期选择器,我可以选择一个日期,但之后,当我将其插入数据库时,我不知道为什么,但这两个日期的行具有当前日期。。如何在日期选择器中插入我选择的日期 在我的数据库中,我将这些列声明为DATETIME 下面是我的日期设置类: public String getDate_debut() { SimpleDateFormat dateFormat = new SimpleDateFormat( "dd-MM

在sqlite数据库中插入一些日期时间值时遇到问题

我有两个日期选择器,我可以选择一个日期,但之后,当我将其插入数据库时,我不知道为什么,但这两个日期的行具有当前日期。。如何在日期选择器中插入我选择的日期

在我的数据库中,我将这些列声明为DATETIME

下面是我的日期设置类:

    public String getDate_debut() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "dd-MM-yyyy HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(date);
}

public void setDate_debut(String date_debut) {
    this.date_debut = date_debut;
}

public String getDate_fin() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "dd-MM-yyyy HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(date);
}

public void setDate_fin(String date_fin) {
    this.date_fin = date_fin;
}
下面是我如何得到一个日期选择器的日期。我不确定格式化字符串的方式,也不确定是否需要格式化,或者是否可以添加为字符串

 private DatePickerDialog.OnDateSetListener datepickerdernier
        = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

        year_x2 = year;

        //les DatePicker
        month_x2 = month +1;
        day_x2 = dayOfMonth;
        datefin = (TextView)findViewById(R.id.TVDatePickerDernier);
        datefin.setText(year_x2+"-"+month_x2+"-"+day_x2);
    }
};


            String date2 = datefin.getText().toString();
            //im not sure about the following lines
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

            Date date_dernier = dateFormat.parse(date2);
最后我插入:

 Cours c = new Cours();
                        c.setBranche_cours(selectedBranche);              
                        c.setDate_fin(date2); //should i set the string ?        
                        dbhelper.Open();
                        dbhelper.insertCours(c);
如何在数据库中插入我选择的日期而不是当前日期?

@更新-**如何更新插入的日期

我有另一个活动,我想修改我以前选择的日期,但我无法

以下是我的sqlite方法:

public void updateCours(Date olddatedebut, Date newdatedebut, Date olddatedernier, Date newdatedernier)
{
Open();

db.execSQL("UPDATE "+TABLE_COURS+" set "+COLONNE_DATEPREMIER+"=date('"+newdatedebut+"') where "+COLONNE_DATEPREMIER+"=date('"+olddatedebut+"')");
db.execSQL("UPDATE "+TABLE_COURS+" set "+COLONNE_DATEDERNIER+"=date('"+newdatedernier+"') where "+COLONNE_DATEDERNIER+"=('"+olddatedernier+"')");
}
以及我如何在我的活动中将其传递给我的方法:

     //this is the new date of the 2nd datepicker
                        String datedernier = convertDateFormat(datenew2, "yyyy-MM-dd", "dd-MMM-yyyy");
                        //this is the new date of the 1st datepicker
                        String datepremier = convertDateFormat(datenew1, "yyyy-MM-dd", "dd-MMM-yyyy");
                        String date_debutold= intent.getExtras().getString("date_debut");
                        String date_finold=intent.getExtras().getString("date_fin");
                        //this is the current date recorded in my database from my datepicker
                        String date_debut1= convertDateFormat(date_debutold, "yyyy-MM-dd", "dd-MMM-yyyy");
                        //this is the current date recorded in my darabase from my 1st datepicker
                        String date_fin1= convertDateFormat(date_finold, "yyyy-MM-dd", "dd-MMM-yyyy");

                        //nouvelledatedebut
                        Date date_premier= new Date(datepremier);
                        Date date_dernier = new Date(datedernier);
                        Date date_premier2 = new Date(date_debut1);
                        Date date_fin2 = new Date(date_fin1);
                        dbhelper.Open();
                       dbhelper.updateCours(selected_brancheold,selectedBranchenew,date_premier2,date_premier,date_fin2,date_dernier,
试试这个

public static String convertDateFormat(String date, String curFormat, String desFormat){
    String newFormat = null;
    Date frmtDate = null;
    try {
        SimpleDateFormat sdf = new SimpleDateFormat(curFormat);

        frmtDate = sdf.parse(date);
        SimpleDateFormat formatter = new SimpleDateFormat(desFormat);
        newFormat = formatter.format(frmtDate);

    } catch (Exception e) {
        newFormat = date;
    }
    return newFormat;
}
样品

String result = convertDateFormat(date2, "yyyy-MM-dd", "dd-MMM-yyyy");
c.setDate_fin(result);
试试这个

public static String convertDateFormat(String date, String curFormat, String desFormat){
    String newFormat = null;
    Date frmtDate = null;
    try {
        SimpleDateFormat sdf = new SimpleDateFormat(curFormat);

        frmtDate = sdf.parse(date);
        SimpleDateFormat formatter = new SimpleDateFormat(desFormat);
        newFormat = formatter.format(frmtDate);

    } catch (Exception e) {
        newFormat = date;
    }
    return newFormat;
}
样品

String result = convertDateFormat(date2, "yyyy-MM-dd", "dd-MMM-yyyy");
c.setDate_fin(result);

这是因为您在getter方法上建立了一些逻辑,并设置了
newdate()
,这将覆盖
Date\u fin
属性上的日期。当您进行insertCours时,此方法可能会尝试查找您尝试插入的对象的所有get方法。尝试更改此选项:

public String getDate_fin() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "dd-MM-yyyy HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(this.date_fin);
}
对此

public String getDate_fin() {
    return this.date_fin;
}

如果您仍然想向日期(字符串)添加格式,您仍然可以在getter方法上添加格式,但我不建议这样做。

这是因为您正在getter方法上创建一些逻辑,并设置
新日期()
,这将覆盖
Date\u fin
属性上的日期。当您进行insertCours时,此方法可能会尝试查找您尝试插入的对象的所有get方法。尝试更改此选项:

public String getDate_fin() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "dd-MM-yyyy HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(this.date_fin);
}
对此

public String getDate_fin() {
    return this.date_fin;
}
如果仍然希望向日期(字符串)添加格式,仍然可以使用getter方法,但我不推荐这样做

存储在SQLite数据库中的每个值(或由 数据库引擎)具有以下存储类之一:

空。该值为空值

整数。该值是一个有符号整数,存储在1、2、3、4、6或8中 字节,具体取决于值的大小

真的。该值是一个浮点值,存储为8字节IEEE 浮点数

文本。该值是一个文本字符串,使用数据库编码存储 (UTF-8、UTF-16BE或UTF-16LE)

斑点。该值是一组数据,与输入时完全相同

没有日期时间。SQlite将其存储为文本。你不能增加一天。你必须阅读并解析它。当你储存它的时候也是一样。你必须解析它

希望它有用

存储在SQLite数据库中的每个值(或由 数据库引擎)具有以下存储类之一:

空。该值为空值

整数。该值是一个有符号整数,存储在1、2、3、4、6或8中 字节,具体取决于值的大小

真的。该值是一个浮点值,存储为8字节IEEE 浮点数

文本。该值是一个文本字符串,使用数据库编码存储 (UTF-8、UTF-16BE或UTF-16LE)

斑点。该值是一组数据,与输入时完全相同

没有日期时间。SQlite将其存储为文本。你不能增加一天。你必须阅读并解析它。当你储存它的时候也是一样。你必须解析它


希望它有用。

对不起,我在我的活动中创建了这个方法?如果它在你的活动中不需要静态使用
private String convertDateFormat
在从日期选择器中选择“date2”后,你是否在“date2”中获得了所需的正确日期?你尝试过niarb的答案吗<代码>获取日期\u fin返回当前date@ankitpurwar,是,当我选择一个日期时,我会在文本视图中显示该日期,它会显示当前日期,但当我添加时,如果我再次检查,它会显示当前日期..很抱歉,但是我在我的活动中创建了该方法?如果它在您的活动中不需要静态使用
私有字符串convertDateFormat
在从日期选择器中选择“date2”后,您是否在“date2”中获得了所需的正确日期?您是否尝试过niarb的答案<代码>获取日期\u fin返回当前date@ankitpurwar,是的,当我选择一个日期时,我会在文本视图中显示它,它会显示当前日期,但当我添加时,如果我再次检查,它会显示当前日期..我想使用字符串而不是日期时间值,但之后,我需要比较这两个日期..然后我有3个列表视图,我必须按日期排序。。但是,即使我将其作为字符串插入,也可以这样做吗?同时,这意味着我必须更改列的类型,对吗?字符串而不是Datetime?@David,将属性用作字符串,或者日期/日期时间/日历由您决定。正如Tostodora所说,SQLite没有任何datetime类型,因此在数据库中插入数据时,可以将日期作为字符串(就像您所做的那样)或整数/数字使用。一个直接向前的选项是,您的属性日期是字符串类型的日期,当您需要两个来比较日期与另一个日期时,您可以将其转换为日期对象。我想使用字符串而不是日期时间值,但之后,我需要比较这两个日期。然后我有3个列表视图,我必须按日期排序。。但是,即使我将其作为字符串插入,也可以这样做吗?同时,这意味着我必须更改列的类型,对吗?字符串而不是Datetime?@David,将属性用作字符串,或者日期/日期时间/日历由您决定。正如Tostodora所说,SQLite没有任何datetime类型,因此在数据库中插入数据时,可以将日期作为字符串(就像您所做的那样)或整数/数字使用。一个直接向前的选项是,您的属性日期是字符串类型的日期,当您需要两个属性将日期与另一个进行比较时,您可以将其转换为日期对象