我正在尝试将手机当前时间添加到我的日期时间列表中。我需要它能够用刻度减去。我尝试过使用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;
}
}
答案 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");
不会编译。 fileDate
是DateTime
个对象。您需要将其分配给另一个DateTime
对象,而不是string
。
如果phonecurrenttime
是DateTime
,您可以省略.ToString()方法。
fileDate = phonecurrenttime;
修改强>
根据您的评论,如果您只想将当前日期/时间分配给fileDate
,则可以使用DateTime.Now
:
fileDate = DateTime.Now;