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

Comparing a Date from an SQLite Database to the current DateTime in C#, Xamarin Forms

所以我在 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;
            }

我是如何创建 Table

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();
        }




    }
}

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

首先尝试获取数据列表,因为table.

中不只有一行数据
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)中比较它们,而不需要获取日期列表。

创建模型 class 作为 table。您需要给它一个主键和名为 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; }

}

抱歉,我不得不删除之前的评论。我错误地认为 SQLite 能够将日期数据转换为 DateTime 对象。因此,我可以抛出一个简单的解析器,它将转换日期数据的 string 值。

如果数据有误,则 return 编辑今天的日期,但是您可以 return 任何日期。你可以像这样使用它……

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;
}