季节的DateTime自定义格式

时间:2013-08-07 21:40:07

标签: c#

我在应用程序中自定义DateTimePicker值时遇到了问题。我已经阅读了各种格式字符串,您可以使用它们来自定义解释日期/时间的方式。问题是我实际上想要在自定义格式字符串中忽略一些文本,以便我可以将季节作为字符串添加到DateTimePicker的开头。

例如,让我们看今天的日期,即2013年8月7日下午5:30(在美国)。如果我使用自定义格式字符串“MMM.d -h:mm tt”,那么日期将显示为8月7日 - 5:30 PM。所以,那是完美的。只是,我想将季节添加到字符串的开头。所以,在这种情况下,它将是“夏天:8月7日 - 5:30 PM ”。

我遇到的问题是,如果我在自定义格式字符串的开头插入单词“Summer”,那么它实际上将双mm作为dateTime的GetMinute值解释。我希望本季保持字面意义,但要解释格式字符串的其余部分(如果有意义的话)。

以下是我正在使用的代码:

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 个答案:

答案 0 :(得分: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 "";
}