将 SQLite 数据库中的日期与 C#、Xamarin Forms 中的当前日期时间进行比较

问题描述 投票:0回答:2

所以我在 Xamarin Forms 中生成了一个 SQLite 数据库。每个项目都有一个名称和日期。我试图提取日期并将其设置为一个变量,以便在加载每个项目时,它将其日期整数转换为 DateTime 并将其与 DateTime.Now 进行比较。 我不知道如何做到这一点,而且我可能会错过一些非常基本的东西 - 我是一个完全的初学者。

public LivePage()
{
    InitializeComponent();

    LiveService.AddLive("2022年3月19日(土): ILLUSION FORCE presents「ILLUSION FORCE×GAUNTLET LONGSTAGE 'GACHINKO'2MAN GIG」", 20220319);
    LiveService.AddLive("2022年3月20日(日)Phantom Excaliver presents 聖剣フェス」", 202203020);
    LiveService.AddLive("2022年4月2日(土)Bad Company vol.17」", 20220402);
    LiveService.AddLive("2022年4月10日(日)VELL'z FIRE presents", 20220410);
    LiveService.AddLive("2022年4月10日(日)ILLUSION FORCE presents「ILLUSION FORCE×Amiliyah LONG STAGE 2MAN GIG」", 20220410);
    LiveService.AddLive("2022年4月29日(金・祝)渋谷メタル会 presents 渋谷メタル会フェス 2022」", 20220429);
    var Lists = LiveService.db.Table<Live>().ToList();
    MainListView.ItemsSource = Lists;
    int dateInt = Lists[2];
    DateTime dater = Convert.ToDateTime(dateInt);
    int result = DateTime.Compare(dater, DateTime.Now);
    if (result < 0)
    {
        Label.TextDecorations = TextDecorations.Strikethrough;
    }

    ...

我如何创建表格

namespace IF2.Models
{
    public class Live
    {
        public string Name { get; set; }
        public string Date { get; set; }
        public string Place { get; set; }
        public string Time { get; set; }
    }
}

服务文件

public static SQLiteConnection db;

static void Init()
{
    if (db != null)
        return;

    // Get an absolute path to the database file
    var databasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Lives.db3");

    db = new SQLiteConnection(databasePath);
    db.DropTable<Live>();
    db.CreateTable<Live>();
}

public static void AddLive(string name, string date)
{
    Init();
 
    var live = new Live
    {
        Name = name,
        Date = date,
        
    };

    var id = db.Insert(live);
}

public static void GetProperties()
{
    Init();
    var Lists = db.Table<Live>().ToList();
}
c# datetime xamarin compare
2个回答
0
投票

在您的代码

public static void AddLive(string name, string date)
中,您将日期的类型设置为字符串。

首先尝试获取数据列表,因为表中不只有一行数据。

var stringlist = new List<string>()
// var intlist = new List<int>()
foreach(item in Lists)
{
  var live = item as Live()
  list.Add(live.Date)
 //intlist.Add(int.Parse(live.Date))
}

立即获取日期时间:

string nowTime = DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo);
// and the value of the string will be like "20220322"

然后你可以将它们与“==”进行比较,例如:

var value = (nowTime == stringlist[i])

您也可以在

foreach(item in Lists)
中比较它们,而无需获取日期列表。

创建一个模型类作为表。您需要给它一个主键和名为 table 的属性。

 [Table("Live")]
public class Live

{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Date { get; set; }
    public string Place { get; set; }
    public string Time { get; set; }

}

0
投票

抱歉我不得不删除我之前的评论。我错误地认为 SQLite 能够将日期数据转换为

DateTime
对象。因此,我可以抛出一个简单的解析器来转换日期数据的
string
值。

如果数据错误,则返回今天的日期,但是您可以返回任何日期。你可以像这样使用它......

DateTime dater = GetDTFromString(dateInt.ToString()); 

解析器...

private DateTime GetDTFromString(string dateString) {
  if (dateString.Length >= 8) {
    string year = dateString.Substring(0, 4);
    string month = dateString.Substring(4, 2);
    string day = dateString.Substring(6, 2);
    if (DateTime.TryParse(year + "," + month + "," + day, out DateTime targetDate)) {
      return targetDate;
    }
  }
  return DateTime.Now;
}
© www.soinside.com 2019 - 2024. All rights reserved.