C# 将字符串转换为Datetime,而不考虑Datetime格式

C# 将字符串转换为Datetime,而不考虑Datetime格式,c#,.net,winforms,datetime,C#,.net,Winforms,Datetime,我有一个日期时间如下存储的文本文件:30/11/2013 1:18:36 PM 如果您只在一台计算机上运行程序,这是可以的,因为日期时间存储的格式与系统使用的格式相同。但是,我遇到了一个问题,如果我将用户更改为我的其他帐户之一,由于某种原因,该帐户正在使用MM/DD/YYYY格式,则会引发一个错误。无论系统格式如何,如何读取日期时间?这就是我现在正在使用的: RecieptList.Add(new Reciept { ...

我有一个日期时间如下存储的文本文件:
30/11/2013 1:18:36 PM

如果您只在一台计算机上运行程序,这是可以的,因为日期时间存储的格式与系统使用的格式相同。但是,我遇到了一个问题,如果我将用户更改为我的其他帐户之一,由于某种原因,该帐户正在使用MM/DD/YYYY格式,则会引发一个错误。无论系统格式如何,如何读取日期时间?这就是我现在正在使用的:

RecieptList.Add(new Reciept
                {
                    ...
                    DateNTime = Convert.ToDateTime(stringArray[(i * 12) + 9]), // == 30/11/2013 1:18:36 PM
                    ...
                });

谢谢

您可以使用
TryParseExact()
解析日期

试试这个:

String dt = "30/11/2013 1:18:36 PM";//or anydate
DateTime result;
if (DateTime.TryParseExact(dt, "dd/MM/yyyy h:mm:ss tt", CultureInfo.InvariantCulture, DateTimeStyles.None,out result))
{
   //success use result
}
编辑:根据您提到的在系统
相关区域性中存储
日期的注释

我强烈建议您在存储日期时使用
CultureInfo.InvarientCulture
参数,将日期存储在
independent culture

这样,在不同的机器中读取数据时不会产生问题

尝试以下操作:将
日期
存储到
文本文件

 String dt = DateObject.ToString(CultureInfo.InvariantCulture);

现在,您可以将字符串
dt
写入
TextFile

,您需要使用正确的计算机设置解析日期。您可以通过调用Thread.CurrentUICulture来获取UI设置

CultureInfo ci = Thread.CurrentUICulture ; // ci refers to the current UI culture
Convert.ToDateTime(dateStr, ci);
用上面的代码替换你的代码,它应该可以工作。你可以在下面找到更多的例子


我想我应该提及错误是什么。无法将字符串转换为日期时间+$异常{“字符串未被识别为有效的日期时间。”}您是否可以选择以不同的方式存储数据?您是怎么想的?我想我想知道时区,然后我想将日期时间存储为UTC。不是你问题的直接部分,只是做类似事情时的一个常见问题。问题似乎是从你写日期开始的。如果您根据当前机器的CultureInfo写入日期,然后尝试以不同的区域性读回,则您将处于死胡同。您应该以独立于CultureInfo的方式存储日期。如何写入这些日期?有时字符串为dd/MM/YYYY,有时为MM/dd/YYYY,具体取决于写入日期时系统的设置。您的示例会以MM/dd/YYYY格式读取日期吗?@Nathan因此输入字符串的日期格式会有所不同?你的问题不清楚。@Nathan:你的任务是不可能的。如何确定日期格式是MM/dd/yyyy还是dd/MM/yyyy。以2013年11月12日为例。这是2013年11月12日还是2013年12月11日?@Nathan:我的代码假设你的日期是
dd/MM/yyyy
格式的,如果日期是其他格式的,它就不起作用了。说得好Janes,我想我现在这样做是必须的。谢谢我提到了CurrentUICulture,CurrentCulture和CurrentUICulture之间有区别,但我忽略了这一点。