【问题标题】:.Net DataTable Date problem.Net DataTable 日期问题
【发布时间】:2011-09-27 12:58:18
【问题描述】:

我正在做一个项目,但我没有任何数据库。我正在使用 ADO.Net 的数据集,然后为了存储我的数据,我编写了 xml 文件并读取了 xml 文件并再次加载数据集。 xml 文件是项目文件,我必须将这个文件从一个系统移动到另一个系统。

在这个数据集中,还有一列DateTime。

我想以特定格式 (dd/MM/yyyy) 将日期存储在字段中。

目前,我的问题是,它检测系统的日期格式并读取日期。但是系统的日期格式可能因系统而异。有些人使用 MM/dd/yyyy,有些人使用 dd/MM/yyyy。因此,当格式更改时,它会引发异常。他们有什么解决方案吗?

我可以强制数据表的 DataTime 字段以我的自定义格式接受日期吗?

提前致谢。

【问题讨论】:

    标签: .net datetime datatable format


    【解决方案1】:

    您是否尝试过: http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

    您可以在第二个参数中指定数据的格式。

    日期也可以在用String.format方法写的时候格式化。

    【讨论】:

      【解决方案2】:

      DateTime 对象只是将日期存储为一个属性,或月、年、日等的一系列属性。但是您可以像这样格式化日期字符串:

           string formatted = String.Format("{0:yyyy/MM/dd HH:mm}", datetime);
      

      或者,如果您正在获取系统日期,我相信它会像这样工作:

           string formatted = String.Format("{0:yyyy/MM/dd HH:mm}", DateTime.Now);
      

      或者,如果您正在将字符串读入 DateTime 对象,则必须进行一些解析:

           string date = "2011/5/20"
           string dateparts = date.Split('/'); 
           string year = dateparts[0];
           string month = dateparts[1]; 
           string day = dateparts[2]; 
      
           DateTime dt = new DateTime(year, month, day, 0, 0, 0); 
      

      但是 DateTime 对象可以从日期的各种字符串表示中初始化,通常不需要解析。看你的情况,

      【讨论】:

        【解决方案3】:

        我过去在序列化日期时间方面遇到过类似问题。

        我建议您删除日期时间字段并改用字符串。这样您就可以完全控制将日期时间对象输入到 DataSet 中的格式。

        将其作为字符串输入后,您需要记录日期时间记录的文化和格式。您可以在软件中对这两个值进行硬编码,并希望它们不会改变(不理想) .将它们放到 .config 文件中(更好)。

        您将这些附加字段添加到您的数据集中。

        MyDateField   - DateTime as a string
        Format.       - "dd/MM/yyyy HH:mm:ss" (for example)
        Culture       - "EN-US" 
        

        因此,当您从 DataSet 中读取日期以实例化您随后使用的 DateTime 对象时。

        var dateTime = DateTime.ParseExact([mydatefield], [format], new cultureInfo([culture]));
        

        *请注意,[] 中的字段是从数据集中的一行中检索到的值。

        这样,您可以在任何机器上使用此日期时间字段,因为您在数据集中指定要使用的文化和格式提供程序。

        您需要在从数据集中实例化日期时间字段的任何地方进行重构,以使用这些日期时间提供程序和文化信息。

        就个人而言,我会从 .config 文件中读取格式和文化信息,因为这些信息不太可能在您的数据集中逐行更改。

        【讨论】:

        • 谢谢贾斯汀,它对我的​​问题很有帮助。再次感谢。
        【解决方案4】:

        只是将日期时间序列化/反序列化为特定格式的快速示例

                DateTime s = DateTime.Now;
                MessageBox.Show(s.ToString("yyddMM"));
                MessageBox.Show(s.ToShortDateString());
                DateTime s2 = DateTime.ParseExact("110307", "yyddMM", CultureInfo.InvariantCulture);
                MessageBox.Show(s2.ToShortDateString());
        

        我完全同意 Justin 的观点。只要将日期存储在文本文件中,只需使用字符串字段即可

        【讨论】:

          猜你喜欢
          • 2019-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多