.Net数据表日期问题

.Net数据表日期问题,.net,datetime,datatable,format,.net,Datetime,Datatable,Format,我正在做一个项目,我没有任何数据库。我使用ADO.Net的数据集,然后为了存储数据,我编写xml文件,读取xml文件,然后再次加载数据集。xml文件是项目文件,我必须将该文件从一个系统移动到另一个系统 在这个数据集中,还有一列DateTime 我想以特定格式(dd/MM/yyyy)在字段中存储日期 目前,我的问题是,它检测系统的日期格式并读取日期。但系统的日期格式可能因系统而异。有些人使用MM/dd/yyyy,有些人使用dd/MM/yyyy。因此,当格式更改时,它抛出异常。他们有什么解决办法吗

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

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

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

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

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

提前感谢。

您是否尝试过以下方法:

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


当您使用String.format方法写入日期时,也可以对其进行格式化。

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对象可以从日期的各种字符串表示形式初始化,通常不需要解析。取决于您的情况,

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

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

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

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

MyDateField   - DateTime as a string
Format.       - "dd/MM/yyyy HH:mm:ss" (for example)
Culture       - "EN-US" 
因此,当您从数据集中读取日期以实例化DateTime对象时,您将使用它

var dateTime = DateTime.ParseExact([mydatefield], [format], new cultureInfo([culture]));
*请注意,[]内的字段是从数据集中的行检索的值

这样,当您在数据集中指定要使用的区域性和格式提供程序时,可以在任何计算机上使用此datetime字段

您需要在数据集中实例化datetime字段的任何地方进行重构,以使用这些datetime提供程序和区域性信息


就我个人而言,我倾向于从.config文件中读取格式和区域性信息,因为它们不太可能在数据集中逐行更改。

这只是将日期时间序列化/反序列化为特定格式的一个简单示例

MyDateField   - DateTime as a string
Format.       - "dd/MM/yyyy HH:mm:ss" (for example)
Culture       - "EN-US" 
        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());

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

谢谢你,贾斯汀,这对解决我的问题非常有帮助。再次感谢。