如何比较变量的日期和小时以及 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");
我做了这个代码:
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");