0

我做了这个代码:

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. 如您所见,我已经完成了这部分。

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

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

4

2 回答 2

0

抱歉,我自己错误地解释了我需要几分钟的准确度,比较中的 + - 5 分钟。但除此之外,您还可以创建变量now并设置窗口的日期和时间,对吗?你为什么要创作dateTimeFromFile?我已经有一个字符串 var,用于存储从文件中读取的日期和小时。现在代码如下所示,但我不明白你所说的,它不起作用

                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");
于 2020-05-24T08:17:25.587 回答
0

要以第二个精度比较两个不同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(协调世界时),这样您DateTime就不会依赖于服务器时区。为了使用它,您可以编写

var now = DateTime.UtcNow;

代替

var now = DateTime.Now;

在您这样做之前,请确认您DateTime在文件中的值也是 UTC。

于 2020-05-23T16:15:06.230 回答