如何将日期dd / mm / yyyy hh:mm:ss AM转换为mm / dd / yyyy hh:mm:ss:抛出无效的强制转换异常

时间:2019-01-24 14:10:00

标签: c# asp.net date datetime

我有一个属性(string)以此格式命名为cdate
25/01/2019 12:41:50 AM

我希望我的输出看起来像这样
01/25/2019 12:41:50 AM
我的代码抛出了无效的强制转换异常错误。

我是C#的新秀

我已经尝试过了,但是没有用
cdate.ToString("MM/dd/yyyy hh:mm:ss")

3 个答案:

答案 0 :(得分:1)

属性cdate的类型是什么?我假设它的类型为DateTime,并且我也假设您正在尝试执行以下操作:

cdate = cdate.ToString("MM/dd/yyyy hh:mm:ss")

在这种情况下,您将获得强制转换异常异常,因为您试图将string值分配给DateTime变量(DateTime.ToString返回string)。 / p>

您可能应该将其分配给新的字符串变量,而不要尝试将其分配给cdate

编辑: 由于cdate的类型为string,因此应使用DateTime方法将其强制转换为ToString对象,以将其转换为所需的格式。

cdate = DateTime 
           .ParseExact(cdate, "dd/MM/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture)
           .ToString("MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

答案 1 :(得分:1)

正如您在对另一个答案的评论中所言cdate的类型为string

您需要将字符串解析为DateTime,然后调用ToString()将日期设置为适当的格式

var cdate = "25/01/2019 12:41:50 AM";
var dt = DateTime.ParseExact(cdate, "dd/MM/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
cdate = dt.ToString("MM/dd/yyyy hh:mm:ss tt");

这将使用CultureInfo.InvariantCulture,否则/:将被替换为当前区域性的日期和时间分隔符。

答案 2 :(得分:0)

尝试使用指定区域性格式(您要使用美国格式)尝试此操作。正是cdate是这里的DateTime实例。

cdate.ToString("G", CultureInfo.CreateSpecificCulture("en-us"));

如果要从字符串中解析DateTime:

DateTime dt = DateTime.Parse(cdate, CultureInfo.CreateSpecificCulture("en-us"));