Android 在放入ListView之前,尝试创建一个自定义游标适配器,将UnixtTime转换为可读的内容
我正在尝试为我正在写的东西制作一个自定义游标适配器。我所做的计划涉及到一个SQLite数据库,其中包含警报发出的日期和时间。(由于SQLite实际上没有DATETIME数据类型,它们在被存储为INT之前都转换为Unix时间。)我发现了制作自定义游标适配器的方法,并尝试对其进行调整,以便它可以接收Unix时间条目并将其转换为人类可读的内容。不过,我遇到了一些障碍。我不确定我所拥有的是否是我所需要的。以下是到目前为止我得到的信息:Android 在放入ListView之前,尝试创建一个自定义游标适配器,将UnixtTime转换为可读的内容,android,sqlite,custom-cursor,Android,Sqlite,Custom Cursor,我正在尝试为我正在写的东西制作一个自定义游标适配器。我所做的计划涉及到一个SQLite数据库,其中包含警报发出的日期和时间。(由于SQLite实际上没有DATETIME数据类型,它们在被存储为INT之前都转换为Unix时间。)我发现了制作自定义游标适配器的方法,并尝试对其进行调整,以便它可以接收Unix时间条目并将其转换为人类可读的内容。不过,我遇到了一些障碍。我不确定我所拥有的是否是我所需要的。以下是到目前为止我得到的信息: import java.util.GregorianCalendar
import java.util.GregorianCalendar;
import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filterable;
import android.widget.TextView;
/**
* @author Dave Smith
*
*/
public class DateTimeCursorAdapter extends SimpleCursorAdapter implements Filterable {
private Context context;
private int layout;
/**
* @param context
* @param layout
* @param c
* @param from
* @param to
* @param flags
*/
public DateTimeCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
this.context = context;
this.layout = layout;
}
public View newView(Context context, Cursor cursor, ViewGroup parent){
Cursor c = getCursor();
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(layout, parent, false);
/*int nameCol = c.getColumnIndexOrThrow("ALARMS.DATETIME");
String dateTime = c.getString(nameCol);
dateTime = convertFromUnixTime(Long.parseLong(dateTime)).toString();
TextView dateTimeText = (TextView) v.findViewById(R.id.dateandtime);
if (dateTimeText != null){
dateTimeText.setText(dateTime);
}*/
return v;
}
public void bindView(Context context, Cursor c, View v){
int nameCol = c.getColumnIndexOrThrow("ALARMS.DATETIME");
String dateTime = c.getString(nameCol);
dateTime = convertFromUnixTime(Long.parseLong(dateTime)).toString();
TextView dateTimeText = (TextView) v.findViewById(R.id.dateandtime);
if (dateTimeText != null){
dateTimeText.setText(dateTime);
}
}
private GregorianCalendar convertFromUnixTime(long unixTime)
{
GregorianCalendar cal = new GregorianCalendar();
cal.setTimeInMillis(unixTime);
return cal;
}
}
这是否允许我从数据库中读入所有UnixTime条目,并以MM/DD/YYYY HH:MM格式(或当前语言环境接受的任何格式)输出它们?无需自定义适配器。让数据库为您工作 从文档中: “1.2日期和时间数据类型 SQLite没有为存储日期和/或时间而预留的存储类。相反,SQLite的内置日期和时间函数能够将日期和时间存储为文本、实数或整数值: 文本为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。实数为朱利安日数,根据前公历,公元前4714年11月24日格林威治中午以来的天数。整数为Unix时间,秒数为1970-01-01 00:00 UTC 应用程序可以选择以任何一种格式存储日期和时间,并使用内置的日期和时间功能在格式之间自由转换。“
在日期/时间进入光标之前,使用适当的SQLite函数转换日期/时间。首先-为什么
c.getString(nameCol)
出现c.getLong(nameCol)
?并且,考虑偷看,而不是乱哄哄地乱写<代码> GregorianCalendar <代码>——当应用程序关心用户区域设置时总是很好。@ Jens:我的印象是,每一个文本视图中显示的都是一个字符串,因为这是一个CURSOR适配器。另一方面,DateUtils听起来比我自己的转换方法更有意义。是的,但是DateUtils将使用用户的语言环境设置为您正确格式化该字符串。您可以使用unix时间戳并使用DateUtils生成适合该设备的文本表示形式。结果不会被强制转换为特定格式吗?这就是为什么我喜欢DateUtils建议(我认为GregorianCalendar是自动做到的)。这完全取决于你的需要。我不希望添加重复已经存在的代码,但这并不适合每个人的需要。