如何使用 C# 将此“2012-08-16T19:20:30.456+08:00”字符串转换为 DateTime [重复]
Posted
技术标签:
【中文标题】如何使用 C# 将此“2012-08-16T19:20:30.456+08:00”字符串转换为 DateTime [重复]【英文标题】:How can I convert this "2012-08-16T19:20:30.456+08:00" string to DateTime using C# [duplicate] 【发布时间】:2020-01-20 06:17:36 【问题描述】:我想使用 C# 将字符串日期时间转换为日期时间。我将日期时间存储在 sql 数据库中
【问题讨论】:
那么,到目前为止,您尝试了什么?任何Parse
方法抛出错误?
注意:这不是 DateTime 值。这是一个 DateTimeOffset 值。
DateTimeOffset.TryParseExact 享受RTM。
当我使用 Datetime.ParseExact 进行转换时发生错误“System.FormatException: 'String '2012-08-16T19:20:30.456 08:00' 未被识别为有效的 DateTime。'”
@janith jayaweera: 你在时区之前没有+
【参考方案1】:
//string value of date
var iDate = "2012-08-16T19:20:30.456+08:00";
//Convert.ToDateTime(String)
//This method will converts the specified string representation of a date and time to an equivalent date and time value
var dateConversion1 = Convert.ToDateTime(iDate);
//DateTime.Parse()
//DateTime.Parse method supports many formats. It is very forgiving in terms of syntax and will parse dates in many different formats. That means, this method can parse only strings consisting exactly of a date/time presentation, it cannot look for date/time among text.
var dateConversion2 = DateTime.Parse(iDate);
//DateTime.ParseExact()
//ParseExact method will allow you to specify the exact format of your date string to use for parsing. It is good to use this if your string is always in the same format. The format of the string representation must match the specified format exactly.
var dateConversion3 = DateTime.ParseExact(iDate, "yyyy-MM-dd HH:mm tt", null);
//CultureInfo
//The CultureInfo.InvariantCulture property is neither a neutral nor a specific culture. It is a third type of culture that is culture-insensitive. It is associated with the English language but not with a country or region.
var dateConversion4 = DateTime.ParseExact(iDate, "yyyy-MM-dd HH:mm tt", System.Globalization.CultureInfo.InvariantCulture);
//DateTime.TryParse method
//DateTime.TryParse converts the specified string representation of a date and time to its DateTime equivalent using the specified culture - specific format information and formatting style, and returns a value that indicates whether the conversion succeeded.
DateTime dateConversion5;
DateTime.TryParse(iDate, out dateConversion5);
这些是几个可以用作转换字符串到 DATETIME 的 C# 方法,请确保字符串是有效的字符串,以便它允许您进行转换。
【讨论】:
正确。当我将参数传递给控制器&UpdatedOn=2012-08-16T19:20:30.456+08:00
'+' 标记丢失。它像这样捕获2012-08-16T19:20:30.456 08:00
。
是的,C# 中的日期转换太复杂了,只要格式无效,它就会出错,因此根据我的观点,处理日期非常困难。哈哈【参考方案2】:
使用DateTime.Parse("2012-08-16T19:20:30.456+08:00")
使用可以使用 C# Interactive Windows 来测试它。
【讨论】:
【参考方案3】:您示例中的字符串有一个偏移量组件,因此您可以使用DateTimeOffset:
var dateTimeOffset = DateTimeOffset.Parse("2012-08-16T19:20:30.456+08:00", CultureInfo.InvariantCulture);
来自链接的文档:
DateTimeOffset 结构包括一个 DateTime 值,以及 一个 Offset 属性,它定义了当前之间的差异 DateTimeOffset 实例的日期和时间以及协调世界时 (UTC)。
【讨论】:
发生同样的错误“System.FormatException: 'String '2012-08-16T19:20:30.456 08:00' 未被识别为有效的日期时间。” 这不是您问题中发布的字符串...它缺少+
符号。您要解析的实际字符串是什么?
哦。你说的对。这是我的 url 参数 "MessageID=23&Status=RECEIVED&UpdatedOn=2012-08-16T19:20:30.456+08:00" 当我在控制器中捕获此参数时它显示没有 + public ActionResult SendDR(int MessageID, string Status, string UpdatedOn) 【参考方案4】:
只是
DateTime date= DateTime.Parse(dateString);
【讨论】:
以上是关于如何使用 C# 将此“2012-08-16T19:20:30.456+08:00”字符串转换为 DateTime [重复]的主要内容,如果未能解决你的问题,请参考以下文章