【发布时间】:2020-07-15 05:41:18
【问题描述】:
我创建了一些代码和类来获取当前时间 (NOW) 和一天结束之间的随机小时和分钟。我的代码有效,但有时时间是错误的。
假设现在是晚上 11:30,我运行代码,我得到错误的输出,写入输出如下所示... 值必须按从现在(执行时)到当天结束的顺序排列。
有谁知道我做错了什么?
错误(小时/分钟):
- 0:23 - 12:23 AM(次日)
- 23:15 - 晚上 11:15
右(小时/分钟):
- 23:15 - 晚上 11:15
- 0:23 - 12:23 AM(次日)
public class MyHourMinuteTestClass
{
ArrayList projects = new ArrayList();
TimeSpan start = DateTime.Now.TimeOfDay;
TimeSpan s = TimeSpan.FromHours(DateTime.Now.Hour);
TimeSpan e = TimeSpan.FromHours(23.99);
int maxMin = (int)((e - s).TotalMinutes);
public MyHourMinuteTestClass()
{
}
public void TestValues()
{
// create 2 sets of values and add a new SocialTimes instance containing the hour/minute to the array list
for(int i = 0; i < 2; i++)
{
int minutes = randomGen.Next(maxMin);
TimeSpan t = start.Add(TimeSpan.FromMinutes(minutes));
int PostTimeHour = t.Hours;
int PostTimeMinutes = t.Minutes;
projects.Add(new SocialTimes(NowDateStr, PostTimeHour, PostTimeMinutes));
}
// then I sort the projects array list
projects.Sort(new hoursMinutesComparer());
}
}
public class SocialTimes
{
string DateToPostStr = "";
public int HourToPost = 0;
public int MinuteToPost = 0;
public SocialTimes(string DateToPostStr, int HourToPost, int MinuteToPost)
{
this.DateToPostStr = DateToPostStr;
this.HourToPost = HourToPost;
this.MinuteToPost = MinuteToPost;
}
public string getDateToPostStr()
{
return this.DateToPostStr;
}
public int getHourToPost()
{
return this.HourToPost;
}
public int getMinuteToPost()
{
return this.MinuteToPost;
}
public int getHourMinuteToPost()
{
int sum;
sum = HourToPost * 60 + MinuteToPost;
return sum;
}
}
public class hoursMinutesComparer : IComparer
{
int IComparer.Compare(Object xx, Object yy)
{
SocialTimes x = (SocialTimes)xx;
SocialTimes y = (SocialTimes)yy;
return x.getHourMinuteToPost().CompareTo(y.getHourMinuteToPost());
}
}
【问题讨论】:
-
我可能会计算出一天还剩下多少分钟,因为这似乎是您的精确度。在该范围内选择一个随机值,将这些分钟添加到现在的时间,然后根据需要对其进行格式化。
-
这能回答你的问题吗? Random date in C#
-
23:15 - 11:15 PM怎么可能是对也错? -
试试这个:
var r = new Random(); var n = DateTime.Now; var result = n.AddSeconds(r.NextDouble() * n.AddDays(1.0).Date.Subtract(n).TotalSeconds);.