我有两个dateTimePicker控件,第一个控件是选择日期当天的0:0:0点,后面空间的日期是就当天晚上的23:59:59。
数据库Timer1的类型是varchar(20)
str = str + "where Che='" + comboBox1.Text.Trim() + "' and ( Timer1 between '" +dateTimePicker1.Value.ToShortDateString() + "' and '" + dateTimePicker2.Value.ToShortDateString() + "') GROUP BY
如何让改dateTimePicker属性
自己试了下
public void SetMyCustomFormat()
{
dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "yyyy-MM-dd 00:00:00";
dateTimePicker2.Format = DateTimePickerFormat.Custom;
dateTimePicker2.CustomFormat = "yyyy-MM-dd 23:59:59";
}
但是实现不了
------解决思路----------------------
DateTimePicker dtp_开始时间 = new DateTimePicker();
dtp_开始时间.Name = "dtp_开始时间";
dtp_开始时间.Location = new Point(150, 85);//位置
dtp_开始时间.Size = new System.Drawing.Size(150, 20);//大小
dtp_开始时间.CustomFormat = "yyyy-MM-dd HH:mm";
//使用自定义格式
dtp_开始时间.Format = DateTimePickerFormat.Custom;
//时间控件的启用
dtp_开始时间.ShowUpDown = true;
dtp_开始时间.Value = DateTime.Now;
这样设置后,默认就是零点了。
------解决思路----------------------
dtp_开始时间.Value = DateTime.Now.Date;
dtp_结束时间.Value = DateTime.Now.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
------解决思路----------------------
简单点
dtp_结束时间.Value = DateTime.Now.Date.AddDays(1).AddSeconds(-1);
------解决思路----------------------
不要用格式化字符串
即使你显示出来是0:0:0了,它真正的value值也还是不对啊
你应该给value赋值成你想赋值的那个时间才对
------解决思路----------------------
这东西靠赋值或者取值的时候做修正来解决,不是限定控件
------解决思路----------------------
2L不是已经给你写好了吗?赋值的时候这样写,或者取值的时候反向写
------解决思路----------------------
Format选Custom
CustomFormat写"yyyy-MM-dd 00:00:00"
取值的时候只取value.Date,不取time,time自己拼接
------解决思路----------------------
dateTimePicker1.Value.ToShortDateString()
你这样写不对
不要直接把Value转换格式.Value本身是DateTime类型,你取其中的Date属性,忽略Time
------解决思路----------------------
dateTimePicker1.CustomFormat = "yyyy-MM-dd 00:00:00";
设置了这个之后,只是时间显示成0:0:0了,value其实并不是0:0:0
所以取值的时候,你不能把时间取出来,而是只取出Date
------解决思路----------------------
dateTimePicker1.Value.Date
取出来就是日期+0:0:0
dateTimePicker1.Value.Date.AddDays(1).AddSeconds(-1)
取出来是日期+23:59:59
------解决思路----------------------
此外确定你SetMyCustomFormat()这个函数执行了
不行还是在设计器里直接指定属性好了,反正规则又不要动态改变
------解决思路----------------------
str = str + "where Che='" + comboBox1.Text.Trim() + "' and ( Timer1 between '" +dateTimePicker1.Value.ToShortDateString() + "' and '" + dateTimePicker2.Value.ToShortDateString() + "') GROUP BY
->
str = str + "where Che='" + comboBox1.Text.Trim() + "' and ( Timer1 between '" +dateTimePicker1.Value.ToString("yyyy-MM-dd")+ + " 0:0:0' and '" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + " 23:59:59') GROUP BY
这样总该行了吧?不可能不行
------解决思路----------------------
跟timer1的类型没有关系
你不用函数自己转换字符串,而是直接拼接个 0:0:0上去,不是一回事吗
还有,你不要每次光说不好使
到底哪里不好使
是时间控件显示的时间不对,还是显示的对,但是数据库查询的不对(SQL语句出错)??
------解决思路----------------------
对了,如果timer1的字段类型是字符串
你用between之前得先强制转换类型为datetime啊
对字符串使用between指令,你期望得到什么结果??
------解决思路----------------------
我建议你还是修改数据库的字段类型吧
时间字段就应该是时间类型,不要弄个奇葩的类型上去,麻烦死
------解决思路----------------------
修改字段类型
不要用字符串做between操作
------解决思路----------------------
不要用字符串做between操作
------解决思路----------------------
string dt_start = dateTimePicker1.Value.ToString("yyyy-MM-dd") + " 00:00:00";
string dt_end = dateTimePicker2.Value.AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
string str = str + "where Che='" + comboBox1.Text.Trim() + "' and ( Timer1 >= '" + dt_start + "' and Timer1 <'" + dt_end + "')";