好吧,我有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”格式。
知道我可能缺少什么吗?
答案 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(),因为后者将使用默认的系统格式。