将字符串转换为日期时间格式(yyyy-mm-dd)

3

我正在从服务器解析日期,日期格式为6/16/2016 3:15:29 PM。你能帮我把日期转换成2016-06-16吗?

我尝试过:

DateTime date = DateTime.ParseExact(datestring, "MM/dd/yyyy h-m-s t", System.Globalization.CultureInfo.InvariantCulture);
string formattedDate = date.ToString("yyyy-MM-dd")

但是它给我报错。

3
输入字符串中的时间分隔符是冒号。 - undefined
尝试使用这个格式 "MM/dd/yyyy h:m:s t" - undefined
请分享您遇到的错误。我怀疑使用“-”作为时间分隔符是问题的一部分。 - undefined
欢迎来到StackOverflow!作为未来提问的提示:当你写下“它给我报错”时,你应该立即考虑告诉我们“哪个”错误。错误信息是关于出了什么问题的最重要的信息来源之一。不告诉我们错误让我们觉得你甚至没有阅读错误信息并试图自己理解它。 - undefined
2个回答

6

你遇到了3个问题

  • 你没有使用正确的时间分隔符
  • 当你需要两个t时,你只使用了一个t
  • 当你只需要一个M时,你使用了两个M

尝试一下

DateTime date = DateTime.ParseExact(datestring, "M/d/yyyy h:m:s tt", System.Globalization.CultureInfo.InvariantCulture);
string formattedDate = date.ToString("yyyy-MM-dd");

你只需要一个 M 的原因是因为 MM 需要前导零。由于日期和时间的值是分隔的,因此最好使用单个版本的月份、日期、分钟和秒钟,因为它们适用于具有或不具有前导零的值。

由于问题中使用的是 h-m-s 格式,你可能不应该将其更改为更为严格的格式 (h:mm:ss),这种格式要求分钟和秒数前加零。 - undefined
@DmitryBychenko 我已经在评论中提到了这一点。给出的示例并没有真正告诉我们是否有前导零。但是如果有的话,单个的 singles 将无法工作,所以这取决于 OP 来确定哪个是正确的。此外,你不也是通过使用一个单独的 d 来做同样的事情吗?而示例中却有两个。 - undefined
@juharr: +1;将我的(已删除的)答案中的dd改为d可以使模式更加宽松(它接受带有或不带前导零的两种输入)。我将dd改为d,因为它应该是M而不是MM,所以我建议我也应该对日期做同样的修改。 - undefined
@DmitryBychenko 你说得对,对于 dms 来说,使用单数更好,因为有分隔符的存在。 - undefined

0
要执行DateTime.ParseExact(),输入字符串的格式和格式字符串必须相同。试试这个方法:
DateTime date = DateTime.ParseExact(datestring, "M/dd/yyyy h:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
string formattedDate = date.ToString("yyyy-MM-dd");

在给定的输入字符串中,以下内容很有趣(2016年6月16日 下午3:15:29):

  1. 月份用单个数字表示,所以应该使用M而不是MM。只有当指定为06时,我们才使用MM
  2. 小时也是一样的情况。正常情况下应该使用h而不是hh
  3. 日期和时间之间以及时间和PM之间都有一个空格。 因此,在生成ParseExact的格式字符串时,我们必须考虑所有这些。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接