我有一个字符串“2023-04- 13 T07:03:20-03:00”,我想转换为DateTime
,格式为“yyyy-MM-ddTHH:mm:ss”**,所以我使用TryParseExact
方法,但我只收到false
作为返回。
这是我正在研究的代码。当变量不带时区时,转换正常进行,但是带时区时,格式无效。
在文档中,我没有发现任何东西说我这样做是错误的。
我也试过将日期样式设置为AssumeUniversal
,它不起作用。
如果有人能给予我一些澄清,我将不胜感激。
using System;
using System.Linq;
using System.Collections.Generic;
using System.Globalization;
public class Program
{
public static void Main()
{
var formats = new[]{
"o",
"s",
"t", "T",
"M/yy",
"dd-MM-yy",
"yyyy-MM-ddTHH:mm:ss",};
foreach(var format in formats)
{
DateTime dat1;
DateTime dat2;
Console.WriteLine(format);
Console.WriteLine("");
Console.WriteLine(DateTime.TryParseExact("2023-04-13T07:03:20-03:00", formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dat1) ? dat1.ToString(format) : "false");
Console.WriteLine(DateTime.TryParseExact("2023-04-13T07:03:20", formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dat2) ? dat2.ToString(format) : "false");
Console.WriteLine("");
Console.WriteLine("--------------------");
}
}
}
结果:
奥
假2023-04- 13 T07:03:20。0000000
s
假2023-04- 13 T07:03:20
t
假7:03 AM
T型
假7:03:20 AM
月/年
错误4/23
年-月-日
13-04-23错误
yyyy-MM-ddTHH:mm:ss
假2023-04- 13 T07:03:20
2条答案
按热度按时间lb3vh1jj1#
应在格式中包含时区偏移量。你可以用“K”来表示。
v64noz0r2#
用于分析日期和时间字符串“2023-04- 13 T07:03:20-03:00”的格式“yyyy-MM-ddTHH:mm:ss”是正确的。但是,您面临的问题与输入字符串中的时区信息有关。
TryParseExact方法无法识别时区信息“-03:00”,该方法需要“+/-HH:mm”格式的时区偏移。要解决这个问题,您可以修改输入字符串,在尝试解析它之前将冒号“:”替换为空字符串。
下面是应该可以工作的代码的更新版本:
在更新后的代码中,我们首先将输入字符串中的冒号“:”替换为空字符串。然后,我们遍历格式列表,并尝试使用每种格式解析输入字符串。输出现在应该以“yyyy-MM-ddTHH:mm:ss”格式显示预期的日期和时间值。