Javascript日期到C#Webservice错误

时间:2015-08-17 03:54:54

标签: javascript c# parsing datetime

我一直在尝试将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。谢谢!

3 个答案:

答案 0 :(得分:2)

toUTCString对象上的Date函数返回RFC2822格式的值,例如"Mon, 17 Aug 2015 05:25:53 GMT"。这与您在C#代码中指定的"yyyy-MM-dd HH:mm:ss:FFF"格式不一致。

您有两种选择。我推荐第二个。

  1. 更改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);
    
  2. 两侧使用更清晰的格式。对于大多数事情,我推荐使用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)

试试这个: - https://dotnetfiddle.net/wLSaYD

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"));