我有javascript日期对象,它以这种格式给我一个日期字符串,“Tue Sep 04 2012B0100(GMT Daylight Time)”
我正在尝试使用ParseEaxcat解析here,但它会抛出无效的日期异常 - 任何人都指向正确格式的方向
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
答案 0 :(得分: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的日期来源。
答案 1 :(得分:3)
这很有效。但是,您可能希望在传递GMT日光时间部分之前将其剥离,以避免在线分割。
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);
编辑以说明偏移。
答案 2 :(得分:2)
我从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);
}
答案 3 :(得分:0)
日期似乎与格式字符串不匹配。格式字符串具有连字符,并且缺少带括号的部分。此外,没有提到带有4个z的格式字符串,因此您可以将第一个更改为0。
答案 4 :(得分:0)
替代方法是将日期转换为JavaScript方面的合理表示将更加健壮:无需猜测语言服务器端,可以正确处理时区。
如果您使用某种自动转换(即JSON.stringify),您可能需要添加一个与日期字段并行的字段,并使用相同值的字符串表示形式,并在服务器端使用它而不是原始字段。
{ dateFied: new Date(),
dateFiledAsIsoString: "....." }
如果决定走这条路线,还要考虑将时区(时间偏移)传递给服务器端代码或在JavaScript端将时间转换为UTC。考虑使用ISO8601格式作为日期:yyyy-MM-ddTHH:mm:ss.fffffffzzz。
答案 5 :(得分: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