如何使用DateTime.Now来打勾

时间:2013-09-01 13:49:43

标签: c# datetime time

我正在尝试将手机当前时间添加到我的日期时间列表中。我需要它能够用刻度减去。我尝试过使用phonecurrentime.ToString("dd hh:mm");,但因为它是一个字符串,所以没有刻度和各种错误!

我需要它与DateTime.now合作。

这是我的代码:

InitializeComponent();

List<DateTime> theDates = new List<DateTime>();
DateTime fileDate, closestDate;

theDates.Add(new DateTime(2000, 1, 1, 10, 29, 0));
theDates.Add(new DateTime(2000, 1, 1, 3, 29, 0));
theDates.Add(new DateTime(2000, 1, 1, 3, 29, 0));

// This is the date that should be found
theDates.Add(new DateTime(2000, 1, 1, 4, 22, 0));

// This is the date you want to find the closest one to
fileDate = DateTime.Now;

long min = long.MaxValue;

foreach (DateTime date in theDates)
{
    if (Math.Abs(date.Ticks - fileDate.Ticks) < min)
    {
        min = Math.Abs(date.Ticks - fileDate.Ticks);
        closestDate = date;
    }
}

3 个答案:

答案 0 :(得分:1)

如果你有一个字符串并希望将其转换为DateTime,你可以使用

CultureInfo cf = new CultureInfo("en-us");

if(DateTime.TryParseExact("12 12:45", "dd hh:mm", cf, DateTimeStyles.None, out fileDate))
{
  // your code
}

,您的代码如下:

    List<DateTime> theDates = new List<DateTime>();
    DateTime fileDate, closestDate;

    theDates.Add(new DateTime(2000, 1, 1, 10, 29, 0));
    theDates.Add(new DateTime(2000, 1, 1, 3, 29, 0));
    theDates.Add(new DateTime(2000, 1, 1, 3, 29, 0));

    // This is the date that should be found
    theDates.Add(new DateTime(2000, 1, 1, 4, 22, 0));

    CultureInfo cf = new CultureInfo("en-us");
    string timeToParse = phonecurrentime.ToString("dd hh:mm");

    if(DateTime.TryParseExact(timeToParse, "dd hh:mm", cf, DateTimeStyles.None, out fileDate))
    {
        long min = long.MaxValue;

        foreach (DateTime date in theDates)
        {
            if (Math.Abs(date.Ticks - fileDate.Ticks) < min)
            {
                min = Math.Abs(date.Ticks - fileDate.Ticks);
                closestDate = date;
            }
        }
     }

如果要比较dateTime的时间部分,可以使用TimeOfDay属性:

        TimeSpan ts = DateTime.Now.TimeOfDay;

        foreach (DateTime date in theDates)
        {
            long diff = Math.Abs(ts.Ticks - date.TimeOfDay.Ticks);

            if (diff < min)
            {
                min = diff;
                closestDate = date;
            }
        }

答案 1 :(得分:1)

上面的达伦戴维斯是正确的。

您可以添加/减去日期时间对象。结果类型为TimeSpan,可让您轻松比较日期和/或时差。

此外,您应该为添加到列表中的每个日期指定一个名称(分配给变量然后添加到列表中)。一个月后你不会记得每天的意思;)

答案 2 :(得分:0)

fileDate = phonecurrentime.ToString("dd hh:mm");

不会编译。 fileDateDateTime个对象。您需要将其分配给另一个DateTime对象,而不是string

如果phonecurrenttimeDateTime,您可以省略.ToString()方法。

fileDate = phonecurrenttime;

修改

根据您的评论,如果您只想将当前日期/时间分配给fileDate,则可以使用DateTime.Now

fileDate = DateTime.Now;