C # Отображение временных интервалов в раскрывающемся списке - PullRequest
0 голосов
/ 23 марта 2012

Получив эту логику для привязки выпадающего списка к набору временных интервалов, я бы хотел улучшить это в терминах

  • Использовать собственные типы данных, предназначенные для даты и времени

  • Сделать настраиваемым

псевдокод

for (var hoursCount = 0; hoursCount <= 12; i++) {
    for (var timeSlots = 0; timeSlots < 2; j++) {
        string hourAndMinute = hoursCount;
        if (timeSlots == 0) {
            hourAndMinute += ":00 AM";
        } else {
            hourAndMinute += ":30 AM";
        }
        if (hourAndMinute != "12:00 AM" || hourAndMinute != "12:30 AM") {
            alert(hourAndMinute);
        }
    }
}

выход

0:00 AM

0:30 AM

.
.
.

12:30 AM

Ответы [ 2 ]

3 голосов
/ 23 марта 2012

Непонятно, какую "конфигурацию" вы хотите здесь, но поскольку вы имеете дело только с временем , я бы лично использовал Noda Time с LocalTime структура для обработки такого рода вещей. (Отказ от ответственности: я главный разработчик на Noda Time, поэтому я несколько предвзят.) Вы могли бы просто использовать DateTime, но, как вы не хотите, чтобы дата ...

Не совсем понятно, какую "конфигурацию" вы хотите, но в Noda Time вы могли бы написать:

LocalTimePattern pattern = LocalTimePattern.CreateWithInvariantInfo("hh:mm tt");
for (var hour = 0; hour <= 12; hour++) {
    for (var slot = 0; slot < 2; slot++) {
        LocalTime time = new LocalTime(hour, slot * 30, 0);
        Console.WriteLine(pattern.Format(time));            
    }
}

С более подробной информацией о том, что вы хотите сделать, мы, несомненно, можем помочь больше.

РЕДАКТИРОВАТЬ: Хорошо, звучит так, как будто вы хотите что-то вроде:

static void DisplaySlots(string format, Period slotLength, int slots)
{
    // Or change the parameter to be a LocalTimePattern
    LocalTimePattern pattern = LocalTimePattern.CreateWithInvariantInfo(format);
    LocalTime time = LocalTime.Midnight;
    for (int i = 0; i < slots; i++)
    {
        Console.WriteLine(pattern.Format(time));
        time = time + slotLength;
    }
}

Затем назовите его с помощью:

DisplaySlots("HH:mm", Period.FromMinutes(20), 100);

(или как там ...)

Альтернативное использование DateTime:

static void DisplaySlots(string format, TimeSpan slotLength, int slots)
{
    DateTime time = DateTime.Today;
    for (int i = 0; i < slots; i++)
    {
        Console.WriteLine(time.ToString(format));
        time = time + slotLength;
    }
}
0 голосов
/ 23 марта 2012

Сначала используйте DateTime struct для логики, а затем преобразуйте ее в строку с предпочтительным форматом для отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...