如何在Windows 10通用应用程序中将CalendarDatePicker中的仅日期值存储到SQLite数据库

时间:2016-02-02 15:19:36

标签: c# sqlite win-universal-app datetimeoffset windows-10-universal

在我的Windows 10通用应用程序中,我使用CalendarDatePicker选择日期:

if (root.path("coordinates").path("coordinates").isArray()) {
  lat = root.path("coordinates").path("coordinates").get(1).asText();
  lon = root.path("coordinates").path("coordinates").get(0).asText();
}

在Code back中,我使用以下代码将日期存储到SQLite数据库中:

<CalendarDatePicker x:Name="cdpStartDate" Width="150" />

我的表类看起来像这样:

booking = new Bookings();
using (
     SQLite.Net.SQLiteConnection conn =
        new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), Common.Utils.DbPath()))
        {
        booking.StartDate = cdpStartDate.Date.ToDateTime();
        conn.Update(booking);
        }

调试预订值时.StartDate是18.11.2015 00:00:00。但是将值保存到SQLite数据库后,该值将转换为17.11.2015 23:00:00。这似乎是Utc时间。 我的应用程序中不需要任何时间信息,只需要日期。

如何在不转换为数据库的情况下保存日期?

谢谢, 乌韦

2 个答案:

答案 0 :(得分:1)

时间戳通常只是某一天的0:00时间。由于SQLite没有为您处理时区,如果您想要获得纯粹的约会,您必须在其中放置一个纯粹的(没有时区)日期时间。

尝试:

SELECT customer_id, LISTAGG(start_term || '-' || end_term || ',' || rate, '; ')
       WITHIN GROUP (ORDER BY rate) AS rate
  FROM table_name
 GROUP BY customer_id;

它实际上是DateTime类,它是如此友好以向其添加本地时区信息。

答案 1 :(得分:1)

GeographicRegion userRegion = new GeographicRegion();
string regionCode = userRegion.Code;

Windows.Globalization.DateTimeFormatting.DateTimeFormatter dtf = new DateTimeFormatter("shortdate", new[] { regionCode }, regionCode, CalendarIdentifiers.Gregorian, ClockIdentifiers.TwentyFourHour);

DateTimeOffset result = cdpStartDate.Date ?? DateTimeOffset.MinValue;

string shortDate = dtf.Format(result);

我使用上面的方法根据本地Windows区域设置创建自定义短日期格式化程序,然后将其存储到字符串中。我知道你想存储一个日期,但正如Kai所说,SQL没有时间部分存储日期,因此这将只提供短格式的日期。