Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA+SQLite-使用strftime()从每一行获取格式化的日期_Java_Android_Sqlite_Date_Datetime Format - Fatal编程技术网

JAVA+SQLite-使用strftime()从每一行获取格式化的日期

JAVA+SQLite-使用strftime()从每一行获取格式化的日期,java,android,sqlite,date,datetime-format,Java,Android,Sqlite,Date,Datetime Format,我已经使用SQLite大约一天了,并且已经设法在Android Studio中使用Java进行读写工作。我对这一切还是相当陌生的,即使是java,所以我可能缺少一些非常基本的东西 昨天我设法使一些东西工作起来,取得了预期的结果。我会将年、月、秒保存到它们自己的列中,然后分别读取它们并手动将它们格式化为字符串。然而,今天我读到,当您以特定格式将SQLite存储为文本时,它有自己的内置日期和时间函数 我改变了一切,改用这种格式,这很简单,但我很难用一种特定的格式来读取日期。目前的格式是: yyyy

我已经使用SQLite大约一天了,并且已经设法在Android Studio中使用Java进行读写工作。我对这一切还是相当陌生的,即使是java,所以我可能缺少一些非常基本的东西

昨天我设法使一些东西工作起来,取得了预期的结果。我会将年、月、秒保存到它们自己的列中,然后分别读取它们并手动将它们格式化为字符串。然而,今天我读到,当您以特定格式将SQLite存储为文本时,它有自己的内置日期和时间函数

我改变了一切,改用这种格式,这很简单,但我很难用一种特定的格式来读取日期。目前的格式是:

yyyy MM dd HH:MM:ss

但是,我想将其格式设置为:

yyyy:MM:dd:HH:MM:ss

我现在只把它存储在一个字符串列表中,这是可行的,我想我不需要更改它

以下是读取日期的代码:

public ArrayList readHistory(){
        SQLiteDatabase nutDatabase = this.getReadableDatabase();
        ArrayList<String> history = new ArrayList<String>();

        Cursor cursor = nutDatabase.rawQuery("select * from " + TABLE_NAME, null);
        cursor.moveToFirst();

        while (!cursor.isAfterLast()){
            String nutString = cursor.getString(dateTime);
            history.add(nutString);
            cursor.moveToNext();
        }
        return history;
    }
如您所见,它当前只是以字符串的形式获取当前的格式。我不知道如何实现strftime,但我知道它正是我所需要的

欢迎您的任何意见,谢谢

在strftime中使用格式“%Y:%m:%d:%H:%m:%S”。 因此,请将代码更改为:

String sql = "SELECT strftime('%Y : %m : %d : %H : %M : %S', dateTime) AS dateTime FROM " + TABLE_NAME;
Cursor cursor = nutDatabase.rawQuery(sql, null);
java.time 除了使用SQL解决问题外,您还可以使用java.time API解决问题,如下所示:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss", Locale.ENGLISH);
        // A sample date-time string. In your code, it will come from
        // cursor.getString(dateTime)
        String nutString = "2020-01-10 20:30:40";
        LocalDateTime ldt = LocalDateTime.parse(nutString, dtfInput);

        DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("uuuu : MM : dd HH : mm : ss", Locale.ENGLISH);
        String formatted = dtfOutput.format(ldt);
        System.out.println(formatted);
        // history.add(formatted);
    }
}
输出:

正如您在代码中看到的,您需要DateTimeFormatter的两个实例—一个用于将从DB检索的日期时间字符串解析为LocalDateTime,另一个用于将LocalDateTime格式化为所需格式的字符串


从中了解现代日期时间API。

既然你说你对这方面还很陌生,我肯定建议你研究一下ROOM和MVVM,因为这样使用SQLite更容易。例如,检查这个代码库:@Antonio我会看的,谢谢。如果它需要对结构进行大的修改,那么我宁愿让它工作,因为我只需要知道如何使用这个函数。非常感谢!每次我运行代码时,它都会崩溃,直到我意识到需要将列索引从dateTime 1更改为0。
2020 : 01 : 10 20 : 30 : 40