C# 将字符串转换为日期时间而字符串具有 AM : PM 格式

C# Convert String to Date Time Whereas string has AM : PM formate

我有字符串时间。让我们说'06:35 PM'。我想将字符串转换为 DateTime。 日期必须是当前时间(他们输入时间的日期)。

我做到了

string times = endTime;
DateTime dt;
(DateTime.TryParseExact(times, "YYYY-MM-dd HH:mm tt", CultureInfo.InvariantCulture,DateTimeStyles.None, out dt))

但是没有用。它产生一个空值。因为当我尝试将结果贴在标签上时,标签没有显示任何内容。而且我也一直在尝试

var date = DateTime.Parse("06:45 AM");
Console.WriteLine(date);

但是还是不行,报错了。

ERROR System.Data.SqlClient.SqlException (0x80131904): The conversion of a varchar data type to a datetime data type resulted in an out-of-range value. The statement has been terminated. "

如何转换?

如果日子无关紧要,您可以使用以下

DateTime date;
if (DateTime.TryParseExact("06:45 AM", new[] {"h:mm tt"}, null, DateTimeStyles.None, out date))
{
    Console.WriteLine(date);
    Console.WriteLine(date.TimeOfDay);
}

我认为下面的代码可以解决您的问题;

DateTime dt = DateTime.Now;
TimeSpan ts = new TimeSpan(06, 45, 0);
dt = dt.Date + ts;

要将字符串转换为 DateTime 格式,请使用以下代码;

string date = "01/08/2008";
DateTime dt = Convert.ToDateTime(date); 

我认为您正在将字符串“06:45 AM”传递给数据库,这不是有效条目,因为数据库不知道如何存储它,因此出现异常。

进一步看,在您的第一个示例中,YYYY 应该是小写的 yyyy。 YYYY 将无法正确解析为日期格式。

考虑到第二个例子,你有两个选择:

1) 写入数据库时​​,请确保传递有效日期,例如以下。您可能需要尝试几种格式来匹配您的数据库所期望的格式,但它需要完整的日期和时间。

var date = string.Format("{0:yyyy-MM-dd HH:mm tt}", DateTime.Parse("06:45 AM"));
Console.WriteLine(date);

2) 使用正确的 SQL 参数类型使用完整的 DateTime 方法。这看起来像是一个很好的解释,涵盖了一些陷阱。 Using DateTime in a SqlParameter for Stored Procedure, format error