【问题标题】:Trying to parse a DateTime in C#尝试在 C# 中解析 DateTime
【发布时间】:2011-05-18 04:28:49
【问题描述】:

我正在尝试在 C# 中解析 DateTime 并具有以下代码行:

string dt =Convert.ToString( DateTime.FromFileTime(e8.sts[counter8].TimeStamp));
string format = "dd-MM-yyyy HH:mm:ss";
DateTime dateTime = DateTime.ParseExact(dt, format,CultureInfo.InvariantCulture);

当我调试 dt 时以 05/18/2011 09:25:17 AM 的形式出现,但我得到一个期望:

字符串未被识别为有效 日期时间。

【问题讨论】:

  • 看看你的 cmets,我越来越清楚 解析 不是问题,你真的想输出 @987654325 @ 为自定义字符串格式。您能否编辑您的问题并添加一些关于您要查找的内容的说明?特别是,将其推入 MySql 似乎是您的要求,而您的问题中没有提及。

标签: c# .net parsing datetime


【解决方案1】:

一开始,您不需要转换。

DateTime.FromFileTime(e8.sts[counter8].TimeStamp) 已经返回 DateTime...

即便如此,使用您提供的字符串,DateTime.Parse(str) 会照顾您。

如果您最终将此值存储在文本文件中,并且真的死心塌地使用自定义格式字符串来解析它(您不需要):

您拥有的格式:

Day/Month/Year 24-hour:minute:second

但是看看你输入的日期:

2011 年 5 月 18 日上午 9:25:17

你想要:

Month/Day/Year 12-hour:minutes:seconds AM/PM

你想要的格式是:

MM/dd/yyyy hh:mm:ss tt

【讨论】:

  • 我将从 OPC 服务器读取日期时间,它将返回值为“129501645169843750”的时间戳,因此我将转换此时间戳以获取日期时间。我将以“MM/dd/yyyy hh:mm:ss tt”格式获取日期时间,并且我想将此时间格式转换为“MM-dd-yyyy HH:mm:ss”格式,因为我将被存储MYSQL 数据库中的日期时间作为日期时间字段 & MYSQL 不接受这种格式 "MM/dd/yyyy hh:mm:ss tt"
  • @vrushali:您展示的代码示例询问如何解析DateTime,而不是如何将其输出为自定义字符串格式。您是否需要有关如何输出到自定义 MM-dd-yyyy HH:mm:ss 字符串格式的信息?
【解决方案2】:

这不是预期的吗?日期 05/18/2011 09:25:17 AM 与您的格式字符串 dd-MM-yyyy HH:mm:ss 不匹配。您的日期格式为MM/dd/yyyy HH:mm:ss tt

试试这个:

 DateTime dateTime = DateTime.Parse("05/18/2011 09:25:17 AM");

【讨论】:

  • 但我想将此日期时间格式转换为 dd-MM-yyyy HH:mm:ss
  • @vrushali - 所以你有这样的日期作为输入 05/18/2011 09:25:17 AM 并且你想将它转换成这样的字符串 18-05-2011 09:25:17?
  • @vrushali - 像这样? ` var input = "05/18/2011 09:25:17 AM"; DateTime dateTime = DateTime.Parse(input);字符串输出 = dateTime.ToString("dd-MM-yyyy HH:mm:ss"); `
  • 但我想在日期时间变量中输出而不是在字符串中
  • @vrushali - 对不起,你让我很困惑。此代码将在解析日期时间DateTime dateTime = DateTime.Parse(inputDateTimeString); 方面做得最好。它根据需要创建 dateTime 变量。
【解决方案3】:

我没有看到任何转换的原因。只需使用:

DateTime.FromFileTime(e8.sts[counter8].TimeStamp)

【讨论】:

  • 我将从 OPC 服务器读取日期时间,它将返回值为“129501645169843750”的时间戳,因此我将转换此时间戳以获取日期时间。我将以“MM/dd/yyyy hh:mm:ss tt”格式获取日期时间,并且我想将此时间格式转换为“MM-dd-yyyy HH:mm:ss”格式,因为我将被存储MYSQL 数据库中的日期时间作为日期时间字段 & MYSQL 不接受这种格式 "MM/dd/yyyy hh:mm:ss tt"
【解决方案4】:

您的 DateTime 输入为 MM-dd-yyyy,但您正尝试将其解析为 dd-MM-yyyy

将格式字符串更改为"MM-dd-yyyy HH:mm:ss tt"

您可以将此告知dt,使用您当前的格式字符串,正试图将其解析为 2011 年第 18 个月 (MM) (yyyy) 的第 5 天 (dd)...

编辑:
抱歉,我完全错过了 AM/PM 指示符,您需要格式字符串的 tt 部分。这将处理字符串的 AM/PM 部分

编辑 2:
根据您最近的评论,您想将其转换为MM-dd-yyyy HH:mm:ss 字符串,您需要做的就是:

var outputString = DateTime.FromFileTime(e8.sts[counter8].TimeStamp).ToString("MM-dd-yyyy HH:mm:ss");

您已经在 val;id .NET DateTime 对象中拥有 TimeStamp,因此您需要做的就是使用所需的时间格式执行 .ToString()

【讨论】:

  • 会显示同样的异常
  • 我会像你告诉我的那样改变,但它会显示相同的异常
  • @vrushali, Anthony Pegram:我很抱歉。我完全错过了dt 字符串表示中的 AM/PM 名称。我已经更新了我的答案并删除了我的愚蠢评论。
  • 实际上我想将“MM/dd/yyyy HH:mm:ss tt”这个日期时间格式转换成这个“MM-dd-yyyy HH:mm:ss”,因为第一个格式不是在存储 MYSQL 数据库日期时间字段中接受,因为第一次使用 '/' 我想要 '-'
  • @vrushali:我已经用代码更新了我的答案,将其输出为正确格式的字符串
【解决方案5】:
DateTime parsed = DateTime.ParseExact(dt,"MM/dd/yyyy HH:mm:ss tt",CultureInfo.InvariantCulture);

【讨论】:

    【解决方案6】:

    这里有很多其他人解释过,格式需要更改。但是,即使我尝试了他们建议的格式,我仍然收到与您相同的错误。最终我找到了正确的格式来获得成功的结果。

    格式应该是:

    string format = "MM/dd/yyyy HH:mm:ss tt";
    

    因为您要指定时间模式,例如 AM。如果月份以单个数字给出,例如:5,则 MM 应替换为 M。我在日期之间使用斜线而不是连字符,因为这是给出原始日期的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 2011-01-11
      • 1970-01-01
      相关资源
      最近更新 更多