我一直在尝试将 JavaScript 日期转换为 C# 日期时间格式以插入到 Microsoft SQL 数据库中。
这是我目前拥有的代码:
Javascript 方面:
var now = new Date();
now = now.toUTCString();
C# 方面:
//time variable is in DateTime Format
Console.WriteLine("Before: "+time);
String timeString = Convert.ToString(time);
Console.WriteLine("Convert: "+timeString);
DateTime newDT = DateTime.ParseExact(timeString, "yyyy-MM-dd HH:mm:ss:FFF", CultureInfo.InvariantCulture);
Console.WriteLine("After: "+newDT);
错误消息:
System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)
at -classfile&method name omiited-(DateTime time)
调试信息:
Before: 17/8/2015 11:43:48 AM
Convert: 17/8/2015 11:43:48 AM
我很确定 ParseExact 中的“timeString”是错误的。
关于如何解决这个问题有什么想法吗? 我想要的结果的格式将采用以下格式: 2015-07-27 14:24:23.853 。谢谢!
最佳答案
Date
对象上的 toUTCString
函数返回 RFC2822 格式的值,例如 “Mon, 17 Aug 2015 05:25:53 GMT”
。这与您在 C# 代码中指定的 “yyyy-MM-dd HH:mm:ss:FFF”
格式不一致。
你有两个选择。我推荐第二个。
更改 C# 代码以匹配传递的格式。
“r”
标准格式符合 RFC2822。string s = "Mon, 17 Aug 2015 05:25:53 GMT"; DateTime dt = DateTime.ParseExact(s, "r", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
双面使用更清晰的格式。对于大多数事情,我推荐使用 ISO8601 格式。在 JavaScript 中,使用
toISOString
方法获取类似于"2015-08-17T05:25:43.780Z"
的日期。然后将您的 C# 代码更改为:var s = "2015-08-17T05:25:43.780Z"; DateTime dt = DateTime.ParseExact(s, "yyyy-MM-dd'T'HH:mm:ss.FFFZ", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
关于Javascript 日期到 C# Web 服务错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32042554/