我的问题:
我在表格中有数据,格式为YYYY-MM ex:2001-02。 当我从我的数据库中查询,并将这些值存储在要显示到列表视图的列表中时,输出变为1/1/2001 12:00 am(不希望它采用此日期时间格式)。
string sql6 = "select YYMM, TotalTrans from t2 where cast(TotalTrans as int) < 1000";
SQLiteCommand command3 = new SQLiteCommand(sql6, sqlite_conn);
SQLiteDataReader reader3 = command3.ExecuteReader();
while (reader3.Read())
{
DateTime yyyymm;
if (DateTime.TryParse(reader3["YYMM"].ToString(), out yyyymm))
{
YYMM.Add(yyyymm);
}
}
基于SO用户帮助,我尝试运行修改查询并使用strftime。
但是现在我的列表中没有任何值(YYMMt21 - 我用来填充列表视图)
string sql13 = "SELECT YYMM FROM t2 WHERE strftime('%Y-%m', YYMM) = '2002-02'";
SQLiteCommand cmd4 = new SQLiteCommand(sql13, sqlite_conn);
SQLiteDataReader rdr4 = cmd4.ExecuteReader();
while (rdr4.Read())
{
// int TotalTranst21;
int yyyyyy;
if (int.TryParse(rdr4["YYMM"].ToString(), out yyyyyy) )
{
YYMMt21.Add(yyyyyy);
}
}
答案 0 :(得分:1)
您应该让程序逻辑为您执行日期格式化。在您的代码中,您的DateTime
对象就像您看到它一样格式化字符串 - 无论日期字符串在SQL中的外观如何,它都将成为DateTime
对象[因此DateTime.TryParse()
]。
查看有关日期格式的MS文档。
http://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx
作为旁注,与其他SQL数据库系统不同,SQLite中没有DateTime的字段类型。您可以将它们存储为整数或文本,并使用链接中引用的内置函数,如下所示。
答案 1 :(得分:1)
您应该使用完整格式的商店日期:YYYY-MM-DD HH:MM:SS.SSS 如果您只需要存储时间或仅存储日期
,则无关紧要您也可以使用其他格式的日期和时间:
<强> REAL 强>
朱利安日数字,即公元前4714年11月24日格林威治中午以来的天数。根据公历格里高利历。
<强> INTEGER 强> as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。
只有在那之后,strftime才能正常工作。
答案 2 :(得分:1)
试试这个
string Mydate = Convert.ToDateTime(rd4["YYMM"]).ToString("yyyy");
您将获得年度
如果你使用它:
string Mydate = Convert.ToDateTime(rd4["YYMM"]).ToString("d");
您将获得结果dd-mm-yyyy(或作为区域设置)
答案 3 :(得分:1)
首先,您希望在列表中显示什么? YYYY-MM
,就像数据库一样?如果是这样,请不要将int
解析为DateTime
,只使用返回的字符串。
现在,代码......
SQL:
string sql6 = "select YYMM, TotalTrans from t2 where cast(TotalTrans as int) < 1000";
//If you are just using YYMM, why choosing two columns???
string sql13 = "SELECT YYMM FROM t2 WHERE strftime('%Y-%m', YYMM) = '2002-02'";
//If dates in database are already in YYYY-MM format, why use STRFTIME?
//STRFTIME will fail (return NULL), as YYYY-MM is not a valid SQLite date string
解析:
//if (DateTime.TryParse(reader3["YYMM"].ToString(), out yyyymm))
//if (int.TryParse(rdr4["YYMM"].ToString(), out yyyyyy) )
//No sense at all. Just use supplied string:
YYMMt21.Add(rdr4["YYMM"].ToString());
结论:
SQLiteCommand command3 = new SQLiteCommand("SELECT YYMM FROM t2 WHERE TotalTrans<1000", sqlite_conn);
SQLiteDataReader reader3 = command3.ExecuteReader();
while (reader3.Read()) {
YYMM.Add(reader3["YYMM"].ToString());
}
......够了!