如何比较变量的日期和小时以及 Windows 的日期和小时?

How do I compare date and hour from a variable and date and hour of Windows?

我做了这个代码:

string[] liness = File.ReadAllLines(ofd.FileName);

if (liness.Length > 0)
{
    string lastLine = liness[liness.Length - 1];
    string[] columns = lastLine.Split(';');
    if (columns.Length > 0)
    {
        string date = columns[0];
        //string lastColumn = columns[columns.Length - 5];
        //ReaderRichTxtBox.Text = date;

        string dateString = date;
        dateString = dateString.Remove(19);

        DateTime dateValue = DateTime.ParseExact(dateString, "dd/MM/yyyy HH:mm:ss", CultureInfo.CurrentCulture);
        if (dateValue.Date.TimeOfDay == DateTime.Now.Date.TimeOfDay)
        {
            MessageBox.Show("OK");
        }
        else
        {
            MessageBox.Show("BAD");
        }

我需要获取 txt 文件的最后一行和第一列。

txt文件是这样的:

21/05/2020 17:05:00 ; info ; info ; info

我只需要 21/05/2020 17:05:00。如您所见,我已经完成了这部分。

现在我有了包含我的 txt 文件的日期和时间的变量 dateString,我需要将它与 Windows 的日期和时间进行比较。如您所见,我试过了,但它只比较日期而不是时间。

如何将我的 txt 文件的日期和时间与 Windows 的日期和时间进行比较?代码应该如何?不考虑毫秒对我来说更好

要比较两个不同的 DateTime 且精度为秒,最简单的方法是

string[] liness = File.ReadAllLines(ofd.FileName);

if (liness.Length > 0)
{
    string lastLine = liness[liness.Length - 1];
    string[] columns = lastLine.Split(';');
    if (columns.Length > 0)
    {
        string date = columns[0];
        //string lastColumn = columns[columns.Length - 5];
        //ReaderRichTxtBox.Text = date;
        string dateString = date;
        dateString = dateString.Remove(19);

        var dateTimeFromFile = DateTime.ParseExact(dateString, "dd/MM/yyyy HH:mm:ss", CultureInfo.CurrentCulture);
        var now = DateTime.UtcNow;

        var timeDifference = now - dateTimeFromFile;
        if (Math.Abs(timeDifference.TotalSeconds) < 1)
        {
            MessageBox.Show("OK");
        }
        else
        {
            MessageBox.Show("BAD");
        }

我使用的是绝对值,所以如果您出于任何原因调换减法行中 datetime 值的顺序,结果不会受到影响。

Math.Abs(timeDifference.TotalSeconds) < 1

判断两个DateTime值相同的条件是它们的差值小于1秒。原因是我们需要考虑一些舍入 +-500 毫秒。

UTC 时间

最好使用 UTC(协调世界时),这样您的 DateTime 就不会依赖于服务器时区。为了使用它,你可以写

var now = DateTime.UtcNow;

而不是

var now = DateTime.Now;

在执行此操作之前,确认文件中的 DateTime 值也是 UTC。

抱歉,我解释得不好,我需要精确的分钟数,在比较中大约为 + - 5 分钟。 但是除此之外,您还创建了变量 now 并设置了 windows 的日期和时间,对吗? 为什么要创建 dateTimeFromFile?我已经有一个字符串变量,用于存储从文件中读取的日期和小时。 现在代码如下所示,但我不太理解你说的,它不起作用

                string lastLine = liness[liness.Length - 1];
                string[] columns = lastLine.Split(';');
                if (columns.Length > 0)
                {
                    string date = columns[0];


                    string dateString = date;
                    dateString = dateString.Remove(19);

                    DateTime dateValue = DateTime.ParseExact(dateString, "dd/MM/yyyy HH:mm:ss", CultureInfo.CurrentCulture);
                    var now = DateTime.UtcNow;
                    var dateTimeFromFile = DateTime.Now.AddMilliseconds(10);
                    var timeDifference = now - dateTimeFromFile;

                    if (Math.Abs(timeDifference.TotalSeconds) <1)
                    {
                        Console.WriteLine("Same");
                    }
                    else
                    {
                        Console.WriteLine("Bad2");