UWP 응용 프로그램의 Extension과 함께 SQLite.NET을 사용하여 DateTime 필드가 포함 된 개체를 저장하는 중 이상한 결과가 나타납니다. 날짜는 몇 시간 떨어져서 저장되는 것으로 보이며 때로는 DateTime의 날짜를 다음 날로 밀어 넣는 것으로 보입니다.SQLite 및 DateTime 정확도 문제
나는 내가 가지고있는 (그래서 같은 저장소 패턴의 방법으로 SQLite는을 사용하여 저장되어있는 상황을 포함,이
public class Situation
{
[PrimaryKey, AutoIncrement]
public int SituationId { get; set; }
public DateTime DateTime { get; set; }
public string Description { get; set; }
}
에 녹화 클래스처럼 보이는 상황 개체를 포함하는 기록이라는 POCO 클래스를 저장하고 단지 관련 방법) 포함 :
: 마지막으로internal class Repository<T> : IRepository<T> where T : class
{
private SQLiteAsyncConnection asyncConn;
public Repository(SQLiteAsyncConnection conn)
{
asyncConn = conn;
}
public async Task<T> GetByIdAsync(int id)
{
var entity = await asyncConn.GetWithChildrenAsync<T>(id);
return entity;
}
public async Task InsertOrUpdateAsync(T entity)
{
await asyncConn.InsertOrReplaceWithChildrenAsync(entity);
}
}
을, 나는은 ConnectionManager 클래스를 사용하여 저장소에 대한 AsyncConnection를 얻을 수
이 AsyncConnection은 DateTimes를 틱으로 저장합니다. 문제의 원인 일 수 있습니다.
날짜 시간 = {} 2016년 7월 1일 오후 12시 59분 59초 : 레코드 개체 Repository.InsertOrUpdateAsync을 사용하기 전에 저장 한 경우
는 즉시 Situation.DateTime는 다음 값을 갖는다 다음
틱 = 그러나 636,029747990010000
는 Repository.GetByIdAsync를 사용하여 기록을 당기는 시간 값은 다음
,536,913 63,210날짜 시간 = {2016년 7월 1일 오후 4시 59분 59초}
진드기는 = 636029891990010000
당신이 볼 수 있듯이, 뭔가 방법 SQLite는이 날짜 시간을 저장하고 함께입니다. 틱 필드가 변경되어 새로운 날짜가되었습니다. 나는 이것이 왜 있는지 100 % 확신하지 못합니다. 나는 DateTime이 정확성에 문제가있을 수 있다는 것을 알고 있지만 DateTimes가 Ticks로 저장되어 있다면 Ticks 필드가 일치하지 않아야합니까? 왜 그들은 바뀌 었습니까?
DateTimes를 틱으로 저장해야한다고 가정 할 때이 문제를 어떻게 해결할 수 있습니까? DateTime 시간을 12로 설정하면 하루를 변경하지 않고도 몇 시간까지 늘리거나 줄일 수 있지만 이상적이지는 않습니다.
도움을 주시면 감사하겠습니다. :)
테이블의 열 데이터 유형은 무엇입니까? –
DateTimeOffset을 사용해 보셨습니까?귀하의 경우 문제는 DateTime이 표준 시간대 정보를 저장하지 않는다는 사실입니다. –
시간대 문제와 완전히 같습니다. 날짜를 저장/읽을 때 UTC 날짜를 사용하여 시간대 문제를 제거하십시오. – redent84