2013-08-07 2 views
0

Я столкнулся с проблемой настройки моего значения DateTimePicker в своем приложении. Я прочитал все о различных строках форматирования, которые вы можете использовать, чтобы настроить способ интерпретации даты и времени. Проблема в том, что я действительно хочу, чтобы часть текста игнорировалась в строке пользовательского формата, чтобы я мог добавить в этом сезоне строку в начало DateTimePicker.DateTime Custom Format for for Seasons

Например, давайте проведем сегодняшнюю дату, которая будет 7 августа 2013 года в 17:30 (в США). Если я использую строку пользовательского формата «MMM.d -h: mm tt», то дата будет показана с 7 августа по 5:30 вечера. Итак, это прекрасно. Только, я хочу добавить сезон к началу строки. Таким образом, в этом случае это будет «Лето: 7 августа - 17:30».

Проблема, с которой я столкнулась, заключается в том, что если я вставляю слово «лето» в начало строки пользовательского формата, тогда он фактически интерпретирует значение double mm как значение GetMinute для dateTime. Я бы хотел, чтобы в сезоне оставался буквальным, но остальная часть строки формата должна интерпретироваться (если это имеет смысл).

Вот код, я использую:

public Form1() 
{ 
    InitializeComponent(); 
    dateTimePicker1.Format = DateTimePickerFormat.Custom; 
    season = getSeason(dateTimePicker1.Value); 
    dateTimePicker1.CustomFormat = convertSeason(season) + " : " + dt_format; 
} 

public int season = 1; //set default to summer 
public string dt_format = "MMM.d -h:mm tt"; 

private int getSeason(DateTime date) 
{ 
    float value = (float)date.Month + date.Day/100; // <month>.<day(2 digit)> 
    if (value < 3.21 || value >= 12.22) return 3; // Winter 
    if (value < 6.21) return 0; // Spring 
    if (value < 9.23) return 1; // Summer 
    return 2; // Autumn 
} 
private string convertSeason(int value) 
{ 
    string season = "Spring"; 
    if (value == 1) season = "Summer"; 
    else if (value == 2) season = "Autumn"; 
    else if (value == 3) season = "Winter"; 
    return season; 
} 

private void dateTimePicker1_ValueChanged(object sender, EventArgs e) 
{ 
    season = getSeason(dateTimePicker1.Value); 
    dateTimePicker1.CustomFormat = convertSeason(season) + " : " + dt_format; 
} 
+1

Почему вы не можете добавить строку сезона после того, как у вас есть форматированная строка DateTime? –

+0

Редактировать каждый ConvertSeason в этом: string season = "'Spring'" – Marek

+0

@ManishMishra Потому что это DateTimePicker? –

ответ

3

Вы должны окружить его в буквальном разделитель строки (для строк формата DateTime): '.

Так что теперь ваш метод может быть такой:

private string convertSeason(int value) 
{ 
    string season = "'Spring'"; 
    if (value == 1) season = "'Summer'"; 
    else if (value == 2) season = "'Autumn'"; 
    else if (value == 3) season = "'Winter'"; 
    return season; 
} 

Однако, ваши методы могут быть улучшены немного. Поэтому я взял на себя смелость:

private int GetSeason(DateTime date) 
{ 
    //using decimal to avoid any inaccuracy issues 
    decimal value = date.Month + date.Day/100M; // <month>.<day(2 digit)> 
    if (value < 3.21 || value >= 12.22) return 3; // Winter 
    if (value < 6.21) return 0; // Spring 
    if (value < 9.23) return 1; // Summer 
    return 2; // Autumn 
} 
private string ConvertSeason(int value) 
{ 
    switch (value) 
    { 
     case 0: 
      return "'Spring'"; 
     case 1: 
      return "'Summer'"; 
     case 2: 
      return "'Autumn'"; 
     case 3: 
      return "'Winter'"; 
    } 
    return ""; 
} 
+0

Ответ на форматирование верен. Однако метод ConvertSeason не будет компилироваться, потому что не все пути кода возвращают значение. –

+0

@CDJorgensen Исправлено. –