窗体上有两个datetimepicker 分别是st,et 表示开始日期和结束日期。有一个datagridview用于显示数据。数据库用的是sqlite。语句如下:select * from tb where stime>'st.Text' and stime<'et.Text'一般情况下是没有问题的,但是遇到这种情况我就出问题了。有的用户,计算机时间格式改了,自定义了时间格式。比如,他把2011-1-1 显示改为 2011张1三1 。时间原本应该是10:00:00 改成10李00四00  用户众多,每个人都有自己的改法。请问遇到这种情况,我如何操作才能使得以上语句能正确运行。谢谢。

解决方案 »

  1.   

    我在formload时这样写。DateTime dtnow = DateTime.Now;
    st.Text = dtnow.Year.ToString() + "-" + dtnow.Month.ToString () + "-" + dtnow.Minute.ToString();但st.text还是显示的是 2011张三李四10月1天这样的话,sql语句就不知道该咋写了。
      

  2.   

    无语了,提交前你应该先验证,至少得保证它是一个有效的DateTime吧.
      

  3.   

    DateTime dtnow = DateTime.Now;
    st.Text = dtnow.ToString("yyyy-MM-dd") ;
      

  4.   


    你不可能只用DateTime.Now,时间是用户输入的,你得保证它的有效性。
      

  5.   

    DateTime dtnow = DateTime.Now;
    st.Text = dtnow.ToString("yyyy-MM-dd") ;这样我试过。不行。datetimepicker还是显示的 2011张三李四10月1天 之类的东西。在提交时,读取 st.Text 还是只能读到 2011张三李四10月1天
      

  6.   

    在ToString()里,提供一个IFormatProvider对象作为第2个参数,可以定义你要的格式规范,比如UTC格式的
      

  7.   

    你是指类似2011张三李四10月1天这种格式的么?
    不太好解析,你可以把字符串中的数字都选出来然后重新拼接。
    比如:  string str = "2011张三李四10月1天";
                foreach (Char c in str)
                {
                    if (Char.IsNumber(c))
                    {
                        Response.Write(c);
                    }
                }
      

  8.   

    你根本不应该用DateTimePicker的Text,而应该用Value,这才是代表的DateTime类型,Text已经是经过格式化的字符串了
    将dateTimePicker1.Text 换成dateTimePicker1.Value.ToString("yyyy-MM-dd")
      

  9.   

    我约莫这他的这个是随便定义的,如果不是中文也是数字的,你说怎么办?
    string str = "20119910919";
      

  10.   

    dateTimePicker1.Text 换成dateTimePicker1.Value.ToString("yyyy-MM-dd")
    换成这样,这个sql语句倒是没有问题了。只是新问题又来了。查询出来结果的datatable中,日期类型的数据全部是"2011张三李四10月1"这样的格式。绑定到datagridview时,日期型的字段,全部出错。请教下,有什么办法能直接获取系统的时间格式后,然后转成标准的时间格式。谢谢了
      

  11.   

    插入数据库的时候也要用dateTimePicker1.Value.ToString("yyyy-MM-dd")的形式啊
      

  12.   

    插入时我写的是 DateTime.Now.ToString ("yyyy-MM-dd HH:mm:ss")但他写进数据库的就成了 "2011张三李四10月1"这样的了
      

  13.   

    试试这样呢
    DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", new System.Globalization.CultureInfo("en-us"))
      

  14.   

    开什么玩笑啊,DateTime.Now会变成张三李四.
    太忽悠人了
      

  15.   

    试试这样呢
    DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", new System.Globalization.CultureInfo("en-us"))这样试了也是一样的结果。我觉得这个问题应该是出在数据库上。在sqlite中,这个字段是日期型,在插入时虽然是格式化成了 2011-10-1。但他仍然按系统日期的格式"2011张三李四10月1"进行保存了。但我在sqlite中也没有找到如何设置datetime类型的格式。
      

  16.   


    您要不信,您可以在找一台xp系统,把系统日期格式改一下。然后做一下操作。控制面板-区域和语言选项-区域选项-自定义-日期 修改短日期格式 为 yyyy张三李四MM月d
      

  17.   

    [Quote=引用 22 楼 ustbwuyi 的回复:]
    引用 20 楼 uvvvw 的回复:
    插入时我写的是 DateTime.Now.ToString ("yyyy-MM-dd HH:mm:ss")但他写进数据库的就成了 "2011张三李四10月1"这样的了开什么玩笑啊,DateTime.Now会变成张三李四.
    太忽悠人了欠扁!!!
      

  18.   

    xp的我没试过,不过在win7下DateTime.Now.ToString()得到的字符串是正常的
      

  19.   

    问题解决了。其实,只需要 datetime.tostring("s")就可以了。不管本机改成什么格式的日期,都没有问题。谢谢大家。