3

我有 javascript 日期对象,它给了我这种格式的日期字符串,“Tue Sep 04 2012B0100 (GMT Daylight Time)”

我正在尝试使用此处提到的 ParseEaxcat 进行解析但它会引发无效的日期异常 - 任何人都指向正确格式的方向

                string date = "Tue Sep 04 2012B0100 (GMT Daylight Time)";
                dt = DateTime.ParseExact(date,"ddd MMM dd yyyyBzzzz",
                     CultureInfo.InvariantCulture);

我也没有高兴地看着这个:http: //msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

4

6 回答 6

8

如果可以(听起来好像因为您拥有该对象),我建议从 Javascript (.getTime()) 中提取自 1970/01/01 以来的毫秒数,将其转换为 .Net ticks (100-纳秒单位),并使用它来解析为 C# DateTime。

var ticks = (jsMillis * 10000) + 621355968000000000;
var date = new DateTime(ticks);

其中 jsMillis 是在 Javascript DateTime 对象上调用 getTime() 获得的数字。

621355968000000000 是将 C# 的日期来源(0001 年 1 月 1 日午夜)转换为 javascript 的日期来源。

于 2012-09-04T17:06:45.417 回答
3

This works. Though, you may want to strip the GMT Daylight Time portion out before passing it in just to avoid the in-line split.

string date = "Tue Sep 04 2012B0100 (GMT Daylight Time)";
var dt = DateTime.ParseExact(date.Split('(')[0].Replace("B","+").Trim(), "ddd MMM dd yyyyzzz", CultureInfo.InvariantCulture);

Edited to account for the offset.

于 2012-09-04T17:07:40.923 回答
3

我从 JavaScript 中得到了不同的日期时间格式。这是我必须做的:

public void Main()
{
    Console.WriteLine(
        ConvertJsDate("Fri Apr 18 2014 16:23:18 GMT-0500 (Central Daylight Time)"));
    //test more regular date
    Console.WriteLine(
        ConvertJsDate("4/18/2014 16:23:18")); 
}

public DateTime ConvertJsDate(string jsDate)
{
    string formatString = "ddd MMM d yyyy HH:mm:ss";

    var gmtIndex = jsDate.IndexOf(" GMT");
    if (gmtIndex > -1) 
    {
        jsDate = jsDate.Remove(gmtIndex);
        return DateTime.ParseExact(jsDate, formatString, null);
    }
    return DateTime.Parse(jsDate);
}
于 2014-04-18T19:26:04.367 回答
0

The date doesn't appear to match the format string. The format string has hyphens, and is missing the parenthesized section. Also, there is no mention of a format string with 4 z's, so you might change the first one to a 0.

于 2012-09-04T17:07:58.287 回答
0

另一种方法是将日期转换为 JavaScript 端的合理表示,这将更加健壮:无需猜测语言服务器端,可以正确处理时区。

如果您使用某种自动转换(即 JSON.stringify),您可能需要添加一个与日期字段平行的字段,并使用相同值的字符串表示形式,并在服务器端使用它而不是原始字段。

{ dateFied: new Date(),
  dateFiledAsIsoString: "....." }

如果决定走这条路线,请考虑将时区(时间偏移)传递给服务器端代码或在 JavaScript 端将时间转换为 UTC。考虑使用 ISO8601 日期格式:yyyy-MM-ddTHH:mm:ss.fffffffzzz。

于 2012-09-04T17:27:28.640 回答
0

有很多方法可以做到这一点......但这是我发现最简单的......

// JavaScript
var d = new Date();
d.toLocaleString();
// =>   "6/26/2015, 2:07:25 PM"

// Can be Parsed by the C# DateTime Class
DateTime d = DateTime.Parse( @"6/26/2015, 2:07:25 PM" );
Console.WriteLine( d.ToLongDateString() );
// =>   Friday, June 26, 2015
于 2015-06-26T18:13:35.560 回答