【问题标题】:How to convert date dd/mm/yyyy hh:mm:ss AM to mm/dd/yyyy hh:mm:ss: am throwing invalid cast exception [closed]如何将日期 dd/mm/yyyy hh:mm:ss AM 转换为 mm/dd/yyyy hh:mm:ss: am throwing invalid cast exception [关闭]
【发布时间】:2019-06-18 07:14:14
【问题描述】:

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

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

我是C#的菜鸟

我已经尝试过了,但它不起作用
cdate.ToString("MM/dd/yyyy hh:mm:ss")

【问题讨论】:

  • cdateDateTime 类型的吗?
  • 能否请您向我们展示您正在使用的代码。 “它不起作用”是什么意思。

标签: c# asp.net date datetime


【解决方案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】:

    cdate 的属性类型是什么?我假设它是DateTime 类型,并且我还假设你正在尝试做这样的事情:

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

    在这种情况下,您将收到强制转换异常异常,因为您尝试将 string 值分配给 DateTime 变量(DateTime.ToString 返回 string)。

    您可能应该将其分配给一个新的字符串变量,而不是尝试将其分配给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);
    

    【讨论】:

    • cdate 是字符串
    • 我已经用正确的方法更新了我的答案,将字符串转换为不同的日期时间格式。
    【解决方案3】:

    试试这个指定文化格式(如你想要的 en-US 格式)。在这里,cdate 就是一个 DateTime 实例。

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

    如果您正在寻找从字符串中解析 DateTime:

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

    【讨论】:

    • 它是字符串格式,我试图将它存储在数据库中的短日期中
    • @nikhiljain 你需要把你在 cmets 中的所有这些小细节放在其他人对你问题的回答中。
    猜你喜欢
    • 1970-01-01
    • 2013-05-18
    • 2017-08-21
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多