将 Long(来自构造函数)转换为 String 后过滤 ArrayList

Posted

技术标签:

【中文标题】将 Long(来自构造函数)转换为 String 后过滤 ArrayList【英文标题】:Filter ArrayList after converting a Long (from the constructors) to a String 【发布时间】:2017-02-04 11:57:55 【问题描述】:

我将这个 Long 值作为 DATETIME 存储在数据库中,我有一个关于如何根据所需日期过滤这些记录的问题,日期和时间存储为 Long 值。我通过这段代码查询记录

public List<DatabaseSource> getListSched() 
 List<DatabaseSource> taskList = new ArrayList<DatabaseSource>();
    // Select All Query
    String selectQuery = "SELECT  * FROM schedTBL" ;
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // looping through all rows and adding to list
    if (cursor.moveToFirst()) 
        do 
            DatabaseSource tasks = new DatabaseSource();
            tasks.setId(cursor.getInt(0));
            tasks.setSubject(cursor.getString(1));
            tasks.setDescription(cursor.getString(2));
            tasks.setDueDateTime(cursor.getLong(3));
            // Adding contact to list
            taskList.add(tasks);
         while (cursor.moveToNext());
    
    db.close();
    // return contact list
    return taskList;

我的构造函数

public DatabaseSource(int id, String subject, String description, Long dueDateTime) 

        this.id = id;
        this.subject = subject;
        this.description = description;
        this.dueDateTime = dueDateTime;
    

现在,当我尝试将 getDueDateTime (Long) 中的值转换为日期和字符串时,它可以完全显示为日期和时间。转换它们后,我想根据日期字符串(来自 sharedpref)过滤记录。我的布局流程是,在从日历中选择日期后,下一个活动显示过滤后的记录,这些记录具有相似的日期但不同的时间。 这是我在列表视图中显示记录的方式

@Override
public View getView(int position, View convertView, ViewGroup parent) 
    sharedPreference = new SharedPreferenceUID();
    text = sharedPreference.getValue2(mContext);
    String dateString= DateFormat.format("yyyy-MM-dd hh:mm a", new Date(mSchedLists.get(position).getDueDateTime())).toString();
    View v = View.inflate(mContext, R.layout.item_listview, null);
    TextView subj = (TextView)v.findViewById(R.id.txtSubject);
    TextView duedate = (TextView) v.findViewById(R.id.txtDueDateTime);
    subj.setText(mSchedLists.get(position).getSubject());
    duedate.setText(dateString);
    v.setTag( mSchedLists.get(position).getId());
    return v;

如您所见,日期和时间已成功转换,但它显示了所有记录,我只想在将其与 sharedpref 中保存的日期进行比较后显示具有相同日期的记录,而不考虑时间。假设您从日历中单击了一个日期,并且该日期已保存到 sharedpref 中,并且下一个活动已经根据从上一个活动中单击的日期过滤了记录。

【问题讨论】:

您应该使用 Long 值进行过滤,而不是字符串。 你不明白,我在数据库中将日期和时间值存储为 Long 那么我想如何仅根据 sharedpref 中保存的日期来查询它并且 sharedpref 中不包含时间?所以在数据库中的意义我将它保存为一个长的(日期和时间的数字转换)。如果可以过滤它并将其发送到另一个数组列表,我该怎么做? 任何你不能在 SharedPreference 中存储日期值的原因。如果你能做到这一点,那么你可能更容易过滤掉数据。 我可以,但问题是 date 的值只要 long 与 date 和 time 的值不同 as long :) 所以我需要将 date 和 time 的值从 arraylist 转换为字符串并尝试通过将日期字符串与它们进行比较来找到过滤它们的解决方案。 【参考方案1】:

据我了解您的问题,您想根据指定日期过滤您的记录,为此。 首先,使用与共享首选项中相同的日期格式格式化您的数据库日期值,假设您使用的是 MM/dd/yyyy 格式。 然后,您将拥有相同格式的日期,然后使用 (Date Obj)date.getTime() 方法(返回毫秒)现在将这些毫秒(您的共享首选项日期)与毫秒(您的数据库日期)进行比较如果以上匹配,则检查日期对象而不是字符串,这意味着日期相同,现在您可以根据它过滤您的记录。 (用于将您的字符串转换为 Date obj。只需使用其构造函数并将字符串传递给它)。

【讨论】:

以上是关于将 Long(来自构造函数)转换为 String 后过滤 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中有没有 LONG转化STRING STRING 转化LONG 的库函数

c++中一个long类型数据转换成IP地址

js中怎么吧long型的日期转换成String类型的

python怎么将string转换成bigint

真的没有来自 std::string_view 的 std::string 的显式构造函数吗?

怎么将long类型转换成date