琐事:如何将JSON2.org DateTime字符串转换为C#DateTime
Asp.NETMVC2Futures似乎不能很好地处理JSON日期时间(包括双精度和十进制值)。因此,我将所有输入设置为字符串,使用了数据验证,并且工作得非常好 但是,我在Firefox 3.6中有一个JSON2.js日期:琐事:如何将JSON2.org DateTime字符串转换为C#DateTime,c#,json,datetime,C#,Json,Datetime,Asp.NETMVC2Futures似乎不能很好地处理JSON日期时间(包括双精度和十进制值)。因此,我将所有输入设置为字符串,使用了数据验证,并且工作得非常好 但是,我在Firefox 3.6中有一个JSON2.js日期: "/Date(1288296203190)/" 如何在C#中将其转换为有效日期 这并没有给出正确的日期(1/2/0001 11:47:09 AM),而不是2010年10月28日星期四16:03:23 GMT-0400(东部夏时制)。这可能是因为32位整数只有10位。然而,
"/Date(1288296203190)/"
如何在C#中将其转换为有效日期
这并没有给出正确的日期(1/2/0001 11:47:09 AM),而不是2010年10月28日星期四16:03:23 GMT-0400(东部夏时制)。这可能是因为32位整数只有10位。然而,这也失败了:
var a = Int64.Parse("1288296203190");
var b = new DateTime(a);
b的值为1/2/0001 11:47:09 AM
它做了什么?包这是一种时间旅行“符号位”问题吗?问题在于历元的差异。看起来您的JSON2.js日期使用的是unix纪元(1970年1月1日),从系统中以毫秒为单位。DateTime(长刻度)文档: 需要一个日期和时间,以100纳秒为单位表示,该时间间隔自公历0001年1月1日00:00:00.000起已过去 像这样的事情应该会让你得到你想要的
var unixEpoch = DateTime(1970, 1, 1);
var ticksSinceEpoch = 1288296203190 * 10000;
var time = new DateTime(unixEpoch.Ticks + ticksSinceEpoch);
问题在于时代的不同。看起来您的JSON2.js日期使用的是unix纪元(1970年1月1日),从系统中以毫秒为单位。DateTime(长刻度)文档: 需要一个日期和时间,以100纳秒为单位表示,该时间间隔自公历0001年1月1日00:00:00.000起已过去 像这样的事情应该会让你得到你想要的
var unixEpoch = DateTime(1970, 1, 1);
var ticksSinceEpoch = 1288296203190 * 10000;
var time = new DateTime(unixEpoch.Ticks + ticksSinceEpoch);
这个问题基本上和这个一样 我认为公认的答案比@matheeeny的答案要好(尽管matheeeny很好地解释了OP最初解决方案的问题) 我将在这里复制: 您可能还需要显式指定DateTimeKind,具体取决于您的具体要求:
这个问题基本上和这个一样 我认为公认的答案比@matheeeny的答案要好(尽管matheeeny很好地解释了OP最初解决方案的问题) 我将在这里复制: 您可能还需要显式指定DateTimeKind,具体取决于您的具体要求:
还有更好的方法(也考虑了您当地的时区): 只需创建这个整数扩展名-
public static class currency_helpers {
public static DateTime UNIXTimeToDateTime(this int unix_time) {
return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(unix_time).ToLocalTime();
}
}
然后在任何地方这样称呼它:
var unix_time = 1336489253;
var date_time = unix_time.UNIXTimeToDateTime();
date\u time
的值为:
5/8/2012 10:00:53 AM
(via:)还有更好的方法(也考虑了您当地的时区): 只需创建这个整数扩展名-
public static class currency_helpers {
public static DateTime UNIXTimeToDateTime(this int unix_time) {
return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(unix_time).ToLocalTime();
}
}
然后在任何地方这样称呼它:
var unix_time = 1336489253;
var date_time = unix_time.UNIXTimeToDateTime();
date\u time
的值为:
5/8/2012 10:00:53 AM
(via:)
我自己解析了字符串。这对我来说很好。任何人有其他优化方法,请让我知道
我自己解析了字符串。这对我来说很好。任何人有其他优化方法,请告诉我。太好了。在DateTime前面加上new,时区减去4小时,你的答案是正确的非常感谢。也许像这个DateTime.UtcNow.Subtract(DateTime.Now)这样的东西可能需要日光节约。在DateTime前面加上new,时区减去4小时,你的答案是正确的非常感谢。也许像这个DateTime.UtcNow.Subtract(DateTime.Now)这样的东西可能也需要夏令时