我在应用程序中自定义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;
}
答案 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 "";
}