1

您将如何处理以下需要转换为 DateTime 对象的字符串值?

"2015/01/22 12:08:51 (GMT+09:00)"

希望将其包含为公认的 DateTime 模式。当我遇到其他格式时,我只想实现一个新模式。

4

4 回答 4

3

这是一段将成功解析给定字符串的代码(注意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.

更多信息参见 GMT 和 UTC 之间的差异

于 2017-08-30T23:39:10.923 回答
1

此代码接受一个字符串并将其转换为 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

于 2017-08-30T22:47:26.060 回答
0

使用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文档中的示例进行了修改。

于 2017-08-30T23:34:31.200 回答
0

这里有 DateTime.Parse 的官方文档和一些示例。它还涵盖其他格式的情况 https://msdn.microsoft.com/it-it/library/system.datetime.parse(v=vs.110).aspx

于 2017-08-30T22:47:43.080 回答