我正在开发一个项目,我没有任何数据库。我正在使用ADO.Net的数据集然后存储我的数据我写了xml文件并读取xml文件并再次加载数据集。 xml文件是项目文件,我必须将此文件从系统移动到系统。
在此数据集中,还有一列DateTime。
我想以特定格式(dd / MM / yyyy)在字段中存储日期。
目前,我的问题是,它检测系统的日期格式并读取日期。但系统的日期格式可能因系统而异。有些人使用MM / dd / yyyy,有些人使用dd / MM / yyyy。因此,当格式更改时,它会抛出异常。他们的解决方案是什么?
我可以强制数据表的DataTime字段以我的自定义格式接受日期吗?
提前致谢。
答案 0 :(得分:0)
你试过这个: http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx
您可以在第二个参数中指定数据的格式。
使用String.format方法编写日期时也可以格式化日期。
答案 1 :(得分:0)
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对象可以从日期的各种字符串表示初始化,通常你不需要解析。取决于你的情况,
答案 2 :(得分:0)
过去,我在序列化日期时间方面遇到过类似的问题。
我建议您删除日期时间字段并改用字符串。这样,您就可以完全控制将日期时间对象输入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文件中读取格式和文化信息,因为这些信息不太可能在数据集中逐行更改。
答案 3 :(得分:0)
只是将日期时间序列化/反序列化为特定格式的简单示例
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());
我完全赞同贾斯汀在这里..只要您将日期存储在文本文件中,只需使用字符串字段