我正在提醒應用程序。應用程序在數據庫中存儲提醒日期,時間和DateLastShown(在不同的字段中)並將其提取出來以執行檢查。與DateTime.ParseExact錯誤
所有日期均爲「d/MM/yyyy」格式。我的問題是,當我從數據庫中提取日期並嘗試存儲回日期時間格式時,它們仍然以「M/d/yyyy」格式顯示,這不是應用程序需要的格式。
我基本上需要從數據庫中提取值做一些檢查,以確定是否應該顯示提醒並執行此操作。這似乎相當直接,也許我犯了一些小錯誤。
下面是我的意見代碼。 任何幫助真的很感激。
public void CheckReminders()
{
IQueryable<Reminder> reminders;
DateTime reminderDate;
DateTime reminderTime;
DateTime reminderLastShown;
DateTime todayDate;
DateTime timeNow;
while (true)
{
try
{
db = new StudioManagementEntities();
reminders = from r in db.Reminders
select r;
foreach (Reminder r in reminders)
{
if (r.Enabled == 1)
{
if (r.Recurring == 1)
{
// This is the code i was using before when the date was in "M/d/yyyy" format
// which seems to be default.
reminderTime = DateTime.Parse(r.Time);
timeNow = DateTime.Parse(DateTime.Now.ToLongTimeString());
if (r.DateLastShown != DateTime.Today.ToShortDateString() && timeNow >= reminderTime)
{
FrmReminder frmReminder = new FrmReminder(r.Id, true);
frmReminder.ShowDialog();
r.DateLastShown = DateTime.Today.ToShortDateString();
}
}
else
{
// Now i need to pass in "d/M/yyyy" format but the
// code seems to return in "M/d/yyyy" format.
reminderDate = DateTime.ParseExact(r.Date, "d/MM/yyyy", null);
// Even this returns in wrong format
reminderDate = DateTime.ParseExact("24/01/2013", "d/MM/yyyy", null);
// Have tried with CultureInfo.InvariantCulture too.
MessageBox.Show(reminderDate.ToString());
return;
if (
r.DateLastShown != DateTime.Today.Date.ToShortDateString() //&&
//r.Date == DateTime.ParseExact(DateTime.Today, "d/MM/yyyy", CultureInfo.InvariantCulture).ToString() //&&
//now.TimeOfDay.TotalSeconds >= reminderTime.TimeOfDay.TotalSeconds
)
{
FrmReminder frmReminder = new FrmReminder(r.Id, true);
frmReminder.ShowDialog();
r.DateLastShown = DateTime.Today.ToShortDateString();
}
}
}
}
db.SaveChanges();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
// Check every minute
Thread.Sleep(60000);
}
}
和DB表。
'Reminder.Time'的數據類型是什麼?當您檢索它時,它的「精確值」是什麼? (不是'reminderTime'的值,而是'r.Time'的值) –
數據庫或Reminder對象中的日期沒有字符串,而是使用日期代替,問題就消失了。 –
@Chris 查看更新。 – SnakeByte