0

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

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

我遇到的问题是,如果我在自定义格式字符串的开头插入单词“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;
}
4

1 回答 1

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 "";
}
于 2013-08-07T21:42:43.697 回答