-3

我正在尝试将电话当前时间添加到我的日期时间列表中。我需要它能够用刻度减去。我试过使用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;
    }
}
4

3 回答 3

1

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

您可以添加/减去日期时间对象。结果是 type TimeSpan,它可以让您轻松比较日期和/或时间差异。

此外,您应该为添加到列表中的每个日期命名(分配给变量然后添加到列表中)。一个月后,您将不记得每一天的含义;)

于 2013-09-01T14:16:15.720 回答
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;
            }
        }
于 2013-09-01T13:57:13.443 回答
0
fileDate = phonecurrentime.ToString("dd hh:mm");

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

如果phonecurrenttime是,DateTime您可以省略 .ToString() 方法。

fileDate = phonecurrenttime;

编辑

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

fileDate = DateTime.Now;
于 2013-09-01T13:54:04.330 回答