我正在使用以下代码:
使用新的SQLite.Net.SQLiteConnection(新的SQLitePlatformWinRT(),DBPath)来获取SQLiteConnection 并创建表。
类包含DateTime DataType
class Transaction
{
[SQLite.Net.Attributes.PrimaryKey, SQLite.Net.Attributes.AutoIncrement]
public int QId { get; set; }
public DateTime PurchaseDate { get; set; }
public int Amount {get;set;}
Public string ItemCode {get;set;}
}
插入数据如下:
var db = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), DBPath);
var newItem = new Transaction()
{
PurchaseDate = DateTime.Now,
Amount = 100,
ItemCode = "Abc-C10"
};
db.Insert(newItem);
日期将存储为Ticks(例如636071680313888433),这是UTC时间。
1)使用上面的DateTime.Now,如果我的电脑时间设置为
1a)在英国时代,
以上代码:purchase = DateTime.Now是否正确转换?
1b)在美国时间,
以上代码:purchase = DateTime.Now是否正确转换?
如何在SQL语句中处理这个勾号?
如何从日期范围中选择所有交易?比如,2016-07-10到2016-07-20?
由于
答案 0 :(得分:1)
使用日期最安全的方法是使用DateTimeOffset
类型而不是DateTime
。
DateTime
不包含有关创建它的时区的信息,它只知道它是UTC还是本地时间,如果数据将在不同的地方使用,这还不够位置。
DateTimeOffset
不仅包含时间和日期信息,还包含时区,这意味着结果将永远是您所期望的。
使用方式没有区别,只需更改类型:
class Transaction
{
[SQLite.Net.Attributes.PrimaryKey, SQLite.Net.Attributes.AutoIncrement]
public int QId { get; set; }
public DateTimeOffset PurchaseDate { get; set; }
public int Amount {get;set;}
Public string ItemCode {get;set;}
}
对于数据库访问:
var db = new SQLite.Net.SQLiteConnection(
new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), DBPath);
var newItem = new Transaction()
{
PurchaseDate = DateTimeOffset.Now, //or use DateTimeOffset.UtcNow for UTC datetime
Amount = 100,
ItemCode = "Abc-C10"
};
db.Insert(newItem);
答案 1 :(得分:0)
1a)在英国时间,以上代码:purchase = DateTime.Now是否正确转换?
1b)在美国时间, 上面的代码:purchase = DateTime.Now是否正确转换?
如果你的意思是转换为正确的时间值,通过“正确转换”,答案是肯定的。它将使用刻度转换为UTC时间。
如何在SQL语句中处理此tick?
如何从日期范围中选择所有交易?比如,2016-07-10到2016-07-20?
从刻度到其他时间单位的转换如下:
因此您可以使用如下所示的SQL语句来获取2016-07-10至2016-07-20的数据:
SELECT min(PurchaseDate) as 'Date',sum(Qty) as 'Size' from Purchase
group by (PurchaseDate/(864000000000*10)) //864000000000*10 = 1day*10
order by PurchaseDate
更新:如果要选择2016-07-10和2016-07-20之间的日期,可以使用以下SQL语句:
select strftime('%Y-%m-%d %H:%M:%S',purchaseDate/10000000 - 62135596800,'unixepoch') as 'date' from purchase where date between '2016-07-10' and '2016-07-20'