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