horario - Cómo SQLite.Net-PCL maneja la hora UTC
hora utc colombia (2)
La forma más segura de trabajar con las fechas es usar el tipo DateTimeOffset
lugar de DateTime
.
DateTime
no contiene la información sobre la zona horaria en la que se creó, todo lo que sabe es si está en hora UTC o local, lo cual no es suficiente si los datos se van a usar en diferentes ubicaciones.
DateTimeOffset
contiene no solo la información de fecha y hora, sino también la zona horaria, lo que significa que el resultado siempre será el esperado.
No hay diferencias en la forma en que se usa, simplemente cambie el tipo:
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;}
}
Para acceso a la base de datos:
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);
Estoy usando el siguiente código:
utilizando la nueva SQLite.Net.SQLiteConnection (nueva SQLitePlatformWinRT (), DBPath) para obtener SQLiteConnection y crear una tabla.
La clase contiene 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;}
}
Insertar datos de la siguiente manera:
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);
La fecha se almacenará como Ticks (por ejemplo, 636071680313888433) y esta es la hora UTC.
1) usando DateTime.Now anterior, si la configuración de tiempo de mi computadora es
1a) en British Time,
el código anterior: purchase = DateTime.Now se convertirá correctamente?
1b) en Usa Time,
el código anterior: purchase = DateTime.Now se convertirá correctamente?
¿Cómo manejar este tic en SQL-statement?
¿Cómo seleccionar todas las transacciones desde, por ejemplo, un rango de fechas? decir, 2016-07-10 a 2016-07-20?
Gracias
1a) en tiempo británico, ¿el código anterior será: purchase = DateTime.Now convertido correctamente?
1b) en el tiempo de Estados Unidos, ¿se convertirá correctamente el código anterior: purchase = DateTime.Now?
Con "convertir correctamente" si quiere decir convertir al valor de tiempo correcto, la respuesta es sí. Se convertirá a la hora UTC usando ticks.
¿Cómo manejar este tic en SQL-statement?
¿Cómo seleccionar todas las transacciones desde, por ejemplo, un rango de fechas? decir, 2016-07-10 a 2016-07-20?
La conversión de ticks a otras unidades de tiempo es como a continuación:
- Garrapatas por día: 864,000,000,000
- Garrapatas por hora: 36,000,000,000
- Garrapatas por minuto: 600,000,000
- Garrapatas por segundo: 10,000,000
- Garrapatas por milisegundo: 10,000
De modo que puede usar la declaración SQL como se indica a continuación para obtener los datos del 2016-07-10 al 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
Actualización: si desea seleccionar la Fecha entre 2016-07-10 y 2016-07-20, puede usar la siguiente declaración 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''