Я сделал небольшое приложение для парковки в C #.Существуют различные цены в зависимости от типа автомобиля и часового пояса.День можно разделить на часовые пояса (например, утро, день, вечер и ночь).Теперь, если клиент прекращает парковку, я хочу вычислить, в каких часовых поясах он припаркован и как долго.
Например, утренний часовой пояс начинается в 6:00 и заканчивается в 12:00, дневной часовой пояс начинается в 12:00.и заканчивается в 16:00, часовой пояс начинается в 16:00 и заканчивается в 23:00, а часовой пояс начинается в 23:00 и заканчивается в 6:00.Клиент начал парковку своей машины в 00:30 и заканчивает парковку в 6:32.В настоящее время у меня есть 4 переменные для этого: время начала парковки, время окончания парковки и время начала часового пояса, а также время окончания часового пояса.
Второй пример будет аналогичен паркам клиентов 24 часа, тогда время парковки охватывает все часовые пояса.1005 *
Как проще всего подсчитать, сколько часов и минут клиент припарковал на своем автомобиле в разных часовых поясах?
С уважением, evilone
РЕДАКТИРОВАТЬ:
Получите ответ от 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";
}
}