1

我知道这样的问题在这里很多。请通过一次

我有一个string来自当前日期的文本框,例如 2012 年 10 月 9 日,我的类属性是DateTime?类型。我正在使用Convert.ToDateTime(datetime_string_from_textbox),但它给了我一个FormatException. DateTime.ParseExact(string, format, CultureInfo, DateTimeStyle)然后我按照 Jon Skeet 的建议尝试了这里,但它仍然给了我同样的例外。

还有一件事——我的本地机器日期时间格式是dd-mm-yyyy. 当我将其切换为mm/dd/yyyy格式时,代码工作正常。所以基本上,我想知道如何将有效的日期时间字符串解析为DateTime对象,而不考虑区域设置、任何设置或对本地机器的任何依赖。

这可能吗?

更新:正在使用的代码

employee.JoiningDate = DateTime.ParseExact(string.Format("{0} 00:00:00", JoiningDate.Text.Trim()), "MM/dd/yyyy hh:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); 

现有问题和所需解决方案

我的系统日期时间显示 24-10-2012(即 10 月 24 日),我的文本框中有 10/17/2012(即 10 月 17 日),因为文本框日期也是有效的,并且在再次部署后客户端日期时间格式将变得未知,因此,我想要一种通用的方法来解析任何有效的日期时间字符串,而不管区域设置如何。这可能吗?

4

4 回答 4

5

这应该有效:

var date = DateTime.ParseExact(str, "M/d/yyyy", CultureInfo.InvariantCulture);

如下测试: 

在此处输入图像描述

于 2012-10-24T11:33:59.437 回答
0

这完全取决于机器设置。DateTime.ParseExact(str, "dd/MM/yyyy", CultureInfo.InvariantCulture);将适用于英国格式,但它会在美国格式上给出格式例外。因此,请根据您的机器设置使用格式。

于 2012-10-24T11:36:32.420 回答
0

尝试使用以下方法将您的日期格式化为国际日期格式:

您将如何以国际格式格式化 DateTime?

您还可以检查您当前的文化:

设置默认日期时间格式 c#

于 2012-10-24T11:36:21.667 回答
0

如果可行,请尝试以下操作

var formatInfo = new DateTimeFormatInfo();
formatInfo.ShortDatePattern = "MM/dd/yyyy";
DateTime.Parse(date, formatInfo); 
于 2012-10-24T11:39:58.367 回答