您将如何处理以下需要转换为 DateTime 对象的字符串值?
"2015/01/22 12:08:51 (GMT+09:00)"
希望将其包含为公认的 DateTime 模式。当我遇到其他格式时,我只想实现一个新模式。
您将如何处理以下需要转换为 DateTime 对象的字符串值?
"2015/01/22 12:08:51 (GMT+09:00)"
希望将其包含为公认的 DateTime 模式。当我遇到其他格式时,我只想实现一个新模式。
这是一段将成功解析给定字符串的代码(注意DateTimeOffset
而不是DateTime
):
var str = "2015/01/22 12:08:51 (GMT+09:00)";
var dt = DateTimeOffset.ParseExact
(str,
"yyyy/MM/dd HH:mm:ss (\\G\\M\\TK)",
System.Globalization.CultureInfo.InvariantCulture
);
//dt now has +9:00 offset - that's correct only if GMT is provided as UTC.
此代码接受一个字符串并将其转换为 DateTime 对象
DateTime myDate = DateTime.Parse("2017-08-28 14:20:52,001", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture);
您需要做的就是创建与您的输入相匹配的格式。此链接有帮助: https ://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings
有关更多详细信息,请阅读:https ://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/strings/how-to-convert-a-string-to-a-datetime
使用DateTime.ParseExact
可能是你最好的选择。它接受输入字符串和输入应匹配的预期格式字符串。true
如果转换成功,它将返回,out
参数将是转换的结果(result
在下面的示例中)。
如果不强制删除“GMT”部分,我无法让它工作,但如果你可以接受,下面的代码应该可以工作。
此示例采用原始输入并将其转换为 UTC 时间(即它根据您的GMT
值调整时间,在您的示例中减去 9 小时):
var input = "2015/01/22 12:08:51 (GMT-08:00)";
var format = "yyyy/MM/dd H:mm:ss (zzz)";
DateTime result;
// Remove the "GMT" portion of the input
input = input.Replace("GMT", "");
if (DateTime.TryParseExact(input, format, CultureInfo.InvariantCulture,
DateTimeStyles.AdjustToUniversal, out result))
{
Console.WriteLine($"'{input}' converts to {result} UTC time.");
}
else
{
Console.WriteLine($"'{input}' is not in the correct format.");
}
此示例根据DateTime.TryParseExact文档中的示例进行了修改。
这里有 DateTime.Parse 的官方文档和一些示例。它还涵盖其他格式的情况 https://msdn.microsoft.com/it-it/library/system.datetime.parse(v=vs.110).aspx