2016-08-27 3 views
0

Я использую ниже код:Как SQLite.Net-PCL ручка UTC время

с использованием новых 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;}  
    } 

вставки данных следующим образом: (.) ​​636071680313888433 например

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); 

дата будет храниться в виде тиков, и это время UTC.

1) с использованием выше DateTime.Now, если моя установка времени Компьютера

1a) в британском время,

будет выше код: покупка = DateTime.Now быть преобразован правильно?

1b) в Usa Время,

будет выше код: покупка = DateTime.Now быть преобразованы правильно?

Как справиться с этим тиком в SQL-заявлении?

Как выбрать все транзакции, например, из диапазона дат? скажем, с 2016-07-10 по 2016-07-20?

Благодаря

+1

Что Вы имеете в виду "convert correct"? Самое правильное поведение - это не преобразование. –

ответ

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); 
+0

Как выбрать диапазон дат, когда Sqlite содержит время UTC. Можете показать мне, как это делается. – MilkBottle

0

1a) в британском время, будет выше код : purchase = DateTime.Now быть преобразован правильно?

1b) в Usa Time, будет указан выше код: buy = DateTime.Now быть преобразован правильно?

«Преобразуйте правильно», если вы имеете в виду преобразование в правильное значение времени, ответ да. Он будет конвертироваться в UTC, используя тики.

Как справиться с этим тиком в SQL-заявлении?

Как выбрать все транзакции, скажем, диапазона дат? скажем, с 2016-07-10 по 2016-07-20?

Convertion от клещей в другие единицы времени, как показано ниже:

  • тиков в день: 864,000,000,000
  • тиков в час: 36,000,000,000
  • тиков в минуту: 600,000,000
  • тиков в второй: 10 000 000
  • Клещи в миллисекундах: 10 000

Таким образом, вы можете использовать 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 

Update: Если вы хотите, чтобы выбрать даты между 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' 
+0

@Xia: Как выбрать дату Между 2016-07-10 и 2016-07-20? Выберите min (PurchaseDate) как «Дата», сумма (Сумма) от покупки между «» и «». Как выразить дату внутри двойной кавычки? – MilkBottle

+0

Вы не можете выразить дату внутри двойной цитаты в SQLite. Для выбора между 2016-07-10 и 2016-07-20, пожалуйста, см. Мое обновление. –

+0

@ Xia: Я скоро вернусь сюда. Большое спасибо. Я буду много работать над этим проектом, чтобы продемонстрировать приложение на основе Microsoft UWP. Надеюсь, что я могу использовать некоторые классные элементы управления и пользовательский интерфейс для этой презентации данных SQLite. – MilkBottle

Смежные вопросы