使用 SQLite 在 Xamarin.Forms 中显示日期时间

Displaying DateTime in Xamarin.Forms with SQLite

我正在为学校项目创建 Xamarin.Forms 应用程序。该项目显示了一个包含开始和结束日期的学期列表(6 个月的时间块)。条款列表显示没有问题,但日期未按预期显示:所有日期均为 01/01/0001。术语 table 是:

    Id          TermName    StartDate   EndDate   
----------  ----------  ----------  ----------
1           Term 1      2020-01-01  2020-06-30
2           Term 2      2020-07-01  2020-12-31
3           Term 3      2021-01-01  2021-06-30
4           Term 4      2021-07-01  2021-12-31
5           Term 5      2022-01-01  2022-06-30
6           Term 6      2022-07-01  2022-12-31

由于 SQLite 没有特定的 DATETIME 数据类型,我将 StartDate 和 EndDate 存储为 TEXT 数据类型,但 terms.cs 模型文件使用 DateTime 数据类型。在加载术语列表时放置一个断点显示: Breakpoint data.

Terms.cs 文件:

[Table("Terms")]
    public class Terms
    {
        public int Term { get; set; }
        public string TermName { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
    }

MainPage.xaml.cs 文件:

protected override void OnAppearing()
        {
            base.OnAppearing();
            using (SQLiteConnection conn = new SQLiteConnection(App.DBLocation))
            {
                conn.CreateTable<Terms>();
                var terms = conn.Table<Terms>().ToList();
                TermsListView.ItemsSource = terms;
                TermsListView.SelectedItem = null;
            }
        }

如何从我的 table 中获取 StartDate 和 EndDate 以正确显示在我的 ListView 中?

在 ListView 中尝试此代码

     <Label
                                        FontSize="18"
                                        HorizontalOptions="Center"
                                        HorizontalTextAlignment="Center"
                                        Text="{Binding StartDate, StringFormat='{0:dd/MM/yyyy}'}" />
<Label
                                        FontSize="18"
                                        HorizontalOptions="Center"
                                        HorizontalTextAlignment="Center"
                                        Text="{Binding EndDate, StringFormat='{0:dd/MM/yyyy}'}" />

因为您将其存储为 string,因此无法将值分配给 DateTime 属性(无自动转换)。所以他们保留默认日期。 将属性更改为:

 public class Terms
    {
        public int Term { get; set; }
        public string TermName { get; set; }
        public string StartDate { get; set; }
        public string EndDate { get; set; }
    }

然后显示这些属性或将值转换为真实的DateTime类型:

public class Terms
        {
            public int Term { get; set; }
            public string TermName { get; set; }
            public string StartDate { get; set; }
            public string EndDate { get; set; }
            public DateTime RealStartDate => DateTime.Parse(StartDate);
            public DateTime RealEndDate => DateTime.Parse(EndDate);
        }

Parse方法我没有测试过,如果结果不是您需要的,您可以查找正确的语法。

在您的视图中,您应该使用 RealStartDateRealEndDate 属性