DateTimePicker搞砸了格式c#

时间:2014-01-16 04:16:31

标签: c# .net datetimepicker

好吧,我有2个DateTimePickers,其中包含在加载表单时设置的自定义格式

start.Format = DateTimePickerFormat.Custom;
end.Format = DateTimePickerFormat.Custom;
start.CustomFormat = "dd/MM/yyyy";
end.CustomFormat = "dd/MM/yyyy";

并且,我的代码应该在这些日期之间得到所有的几周,它正确地执行,然后每周打印。 我设法这样做了:

DateTimePicker tempdt = start;
tempdt.Format = DateTimePickerFormat.Custom;
tempdt.CustomFormat="dd/MM/yyyy";

int a = getWeeks();//method that gets the weeks between start and end
int d = 0;

for (int i = 0; i < a; i++)
{
    d += 7; 
    MessageBox.Show(tempdt.Value.Date.AddDays(d).ToShortDateString());
}

代码完美无缺,它确实可以准确地显示周数,但是看起来似乎还有“mm / dd / yyyy”格式。

知道我可能缺少什么吗?

2 个答案:

答案 0 :(得分:1)

DateTimePickers与此无关。您的问题是致电ToShortDateString(),将当前文化设置为mm/dd/yyyy

也可以在文本框中使用自定义格式。

MessageBox.Show(tempdt.Value.Date.AddDays(d).ToString("dd/MM/yyyy"));

同样来自您显示的代码tempdt是完全没必要的,甚至从未向用户显示。您也可以删除Date来电,因为您无法向用户显示时间,并且只会将整个天数添加到该日期。这样可以简化代码

int a = getWeeks();//method that gets the weeks between start and end
int d = 0;

for (int i = 0; i < a; i++)
{
    d += 7; 
    MessageBox.Show(start.Value.AddDays(d).ToString("dd/MM/yyyy"));
}

答案 1 :(得分:1)

DateTimePicker格式的要点是控制用户在控件中看到的内容。那个'tempdt'甚至根本没有向用户显示,所以根本不应该被使用。您的计算使用该DTP的Value属性。该属性是DateTime,完全不知道并且不受DTP格式的影响。在计算中摆脱DTP,只使用DateTime。

当您显示计算结果时,您必须在当时以适当的格式将该DateTime转换为String。如果要显示“dd / MM / yyyy”格式,请调用.ToString(“dd / MM / yyyy”)而不是.ToShortDateString(),因为后者将使用默认的系统格式。