如何将javascript数字日期转换为C#日期(使用C#,而不是javascript!)

时间:2011-01-14 02:10:36

标签: c# javascript datetime date

我正在抓取一个网站,在html中它有一个日期格式如下:

"date":"\/Date(1184050800000-0700)\/"

如果这是在javascript中,它将是一个日期对象,我可以使用它的方法以我喜欢的任何格式检索数据。但是,我正在使用C#应用程序进行抓取。有谁知道这种格式是什么?它是特定日期之后的总秒数吗?我需要一种方法将其转换为C#datetime对象。

4 个答案:

答案 0 :(得分:12)

如果我没弄错,这是一个以毫秒为单位的Unix时间戳1184050800000是时间戳本身,-0700是时区。 This epoch convertor确认。

以下是我之前用于将Unix时间戳转换为DateTimes的一些代码。请务必仅包括-0700之前的部分:

/// <summary>
/// Converts a Unix timestamp into a System.DateTime
/// </summary>
/// <param name="timestamp">The Unix timestamp in milliseconds to convert, as a double</param>
/// <returns>DateTime obtained through conversion</returns>
public static DateTime ConvertFromUnixTimestamp(double timestamp)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    return origin.AddSeconds(timestamp / 1000); // convert from milliseconds to seconds
}

如果您遇到以秒为单位的Unix时间戳,则只需删除代码最后一行的/ 1000部分。

答案 1 :(得分:1)

正如sinelaw所说它似乎是某种类型的正则表达式,但是我尝试解析出数值:

1184050800000-0700

它们似乎对应于:

  • 1184050800000 - Unix时间戳(以毫秒为单位)

  • -0700 - 这将是时区偏移UTC-07:00

您可以解析它(我假设它是来自JSON对象的字符串)并将其转换为DateTime,如下所示:

string dateString = "/Date(1184050800000-0700)/";
Regex re = new Regex(@"(\d+)([-+]\d{4})");
Match match = re.Match(dateString);

long timestamp = Convert.ToInt64(match.Groups[1].Value);
int offset = Convert.ToInt32(match.Groups[2].Value) / 100;

DateTime date = new DateTime(1970, 1, 1).AddMilliseconds(timestamp).AddHours(-offset);
Console.WriteLine(date); // 7/10/2007 2:00:00 PM

答案 2 :(得分:0)

我错了吗?它看起来像是我的正则表达式,而不是日期对象。

答案 3 :(得分:-1)

DateTime now = new DateTime(1184050800000);
Console.WriteLine(now); // 2/01/0001 8:53:25 AM

如果你对这一年不感兴趣,这可能是正确的吗?