我正在抓取一个网站,在html中它有一个日期格式如下:
"date":"\/Date(1184050800000-0700)\/"
如果这是在javascript中,它将是一个日期对象,我可以使用它的方法以我喜欢的任何格式检索数据。但是,我正在使用C#应用程序进行抓取。有谁知道这种格式是什么?它是特定日期之后的总秒数吗?我需要一种方法将其转换为C#datetime对象。
答案 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
如果你对这一年不感兴趣,这可能是正确的吗?