我正在做一个项目,没有任何数据库。我使用ADO.Net的数据集,然后为了存储我的数据,我编写了xml文件,读取了xml文件并再次加载数据集。xml文件是项目文件,我必须将该文件从一个系统移动到另一个系统。
在这个数据集中,还有一列DateTime。
我想以特定格式(dd/MM/yyyy(将日期存储在字段中。
目前,我的问题是,它检测系统的日期格式并读取日期。但系统的日期格式可能因系统而异。有些人使用MM/dd/yyyy,有些人使用dd/MM/yyyy。因此,当格式更改时,它会抛出异常。他们有解决方案吗?
我可以强制数据表的DataTime字段接受自定义格式的日期吗?
提前谢谢。
我过去在序列化日期时间时也遇到过类似的问题。
我建议您去掉日期时间字段,改为使用字符串。这样,您就可以完全控制数据集中输入日期-时间对象的格式。
一旦你把它作为字符串输入,你就需要记录日期时间的记录区域和格式。你可以在软件中对这两个值进行硬编码,希望它们不会改变(不理想(。将它们放到.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]));
*请注意,[]中的字段是从数据集中的一行检索到的值。
这样,当您在数据集中指定要使用的区域性和格式提供程序时,您可以在任何计算机上使用此日期时间字段。
您需要在数据集中的所有位置重构日期时间字段,以使用这些日期时间提供程序和区域性信息。
就我个人而言,我会从.config文件中读取格式和区域性信息,因为这些信息在数据集中不太可能逐行更改。
你试过这个吗:http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx
您可以在第二个参数中指定数据的格式。
使用String.format方法编写日期时,也可以对其进行格式化。
DateTime对象只是将日期存储为一个属性,或者存储Month、Year、Day等的一系列属性。但是您可以格式化日期字符串,如下所示:
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 s = DateTime.Now;
MessageBox.Show(s.ToString("yyddMM"));
MessageBox.Show(s.ToShortDateString());
DateTime s2 = DateTime.ParseExact("110307", "yyddMM", CultureInfo.InvariantCulture);
MessageBox.Show(s2.ToShortDateString());
我完全同意贾斯汀的观点。。只要您将日期存储在文本文件中,只需使用字符串字段而不是