【发布时间】:2011-07-28 04:51:41
【问题描述】:
我用 C# 做了一个小停车应用程序。根据车辆类型和时区,有一些不同的定价。一天可以分为时区(例如早上、白天、晚上和晚上)。现在,如果客户停止停车,我想计算客户在哪个时区停车以及停了多长时间。
例如,早上时区从 6:00 开始到 12:00 结束,白天时区从 12:00 开始到 16:00 结束,晚上时区从 16:00 开始到 23:00 结束,夜间时区区域从 23:00 开始,到 6:00 结束。客户在 00:30 开始停车,并在 6:32 结束停车。目前我有 4 个变量:停车开始时间、停车结束时间和时区开始时间和时区结束时间。
第二个例子就像客户 24 小时停车,那么停车时间涵盖了所有时区。
如何计算客户在不同时区停车的小时数和分钟数的最简单方法是什么?
问候, 恶人
编辑:
从 MSDN 获得此答案并将其发布在此处,以便其他人也可以从中学习。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DateTime start = new DateTime(2011, 7, 25, 0, 30, 0);
DateTime end = new DateTime(2011, 7, 26, 6, 32, 0);
List<DateTime> listTimeZones = CalculateTotalTime(start, end);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < listTimeZones.Count; i++)
{
sb.AppendLine(String.Format("{0}. {1}: from {2} to {3}",
i + 1,
GetZoneInWords(listTimeZones[i].Hour),
String.Format("{0:dd.MM.yyyy hh:mm}", listTimeZones[i]),
(i + 1) < listTimeZones.Count
? String.Format("{0:dd.MM.yyyy hh:mm}", listTimeZones[i + 1])
: "Parking ended"));
}
MessageBox.Show(sb.ToString());
}
private List<DateTime> CalculateTotalTime(DateTime start, DateTime end)
{
DateTime temp = start;
int hour = start.Hour;
int minute = start.Minute;
int morning = 6;
int day = 12;
int evening = 17;
int night = 23;
List<DateTime> timeZones = new List<DateTime>();
do
{
temp = temp.AddHours(1);
if (temp.Hour == morning || temp.Hour == day ||
temp.Hour == evening || temp.Hour == night)
{
timeZones.Add(temp);
}
} while (temp < end);
return timeZones;
}
private string GetZoneInWords(int time)
{
string timeOfDay = "";
if (time.Equals(6))
timeOfDay = "Morning";
else if (time.Equals(12))
timeOfDay = "Day";
else if (time.Equals(17))
timeOfDay = "Evening";
else if (time.Equals(23))
timeOfDay = "Night";
return timeOfDay + " parking";
}
}
【问题讨论】: