我一直在尝试将javascript日期转换为c#datetime格式,以便插入到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
我很确定它是" timeString"在ParseExact中是错误的。
关于如何解决这个问题的任何想法? 我想要的结果格式是这种格式:2015-07-27 14:24:23.853。谢谢!
答案 0 :(得分:2)
toUTCString
对象上的Date
函数返回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);
答案 1 :(得分:1)
Nothing
答案 2 :(得分:0)
17/8/2015 11:43:48 AM
格式为dd/M/yyyy HH:mm:ss tt
,并使用tostring格式
DateTime newDT = DateTime.ParseExact(timeString, "dd/M/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);
Console.WriteLine("After: "+newDT.ToString("yyyy-MM-dd HH:mm:ss.fff"));