遇到DateTime.ParseExact问题

时间:2013-11-15 00:49:57

标签: c# winforms datetime

我正在制作提醒申请表。应用程序将提醒Date,Time和DateLastShown(在不同的字段中)存储在数据库中,并将它们拉出来执行检查。

所有日期均为“d / MM / yyyy”格式。我的问题是,当我从数据库中提取日期并尝试存储回DateTime格式时,它们仍然以“M / d / yyyy”格式显示,这不是应用程序需要的方式。

我基本上需要从DB中提取值进行一些检查,以确定是否需要显示提醒并执行此操作。这似乎相当直接,也许我正在做一些小错误。

以下是我的评论代码。 任何帮助真的很感激。

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表。 enter image description here

1 个答案:

答案 0 :(得分:4)

如果解析到日期对象没有错误输出,那么当您致电.ToString().

时,您的输出就会出现问题

来自文档:

  

ToString方法返回日期和的字符串表示形式   在当前文化使用的日历中的时间。

如果您需要的不是用户当前的区域性设置,您可以在重载的ToString()方法中使用格式字符串指定:

   var reminderDate = DateTime.ParseExact("24/01/2013", "d/MM/yyyy", null);

   MessageBox.Show(reminderDate.ToString("d/MM/yyyy"));

此外,正如其他人在评论中所述,如果可能,您应该在数据库中使用日期数据类型,而不是将值存储为字符串。

相关问题