永发信息网

C# JSON 时间格式

答案:1  悬赏:50  手机版
解决时间 2021-04-05 03:23
C# JSON 时间格式
最佳答案
(1)直接数字型日期。
因为JavaScript 的时间类型是从1970年1月1日以来的毫秒数。这有点类似UNIX/Linux的时间是1970年1月1日以来的秒数。当然,为支持国际化,这里的1970年1月1日的毫秒数是UTC(GMT)格林威治时间。
如:
{Date: new Date(1278903921551)}
JavaScript Parser:
var obj = eval('(' + "{Date: new Date(1278903921551)}" + ')');
var dateValue = obj["Date"];
C# Parser:
long dateNumber = 1278903921551;
long beginTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
DateTime dateValue = new DateTime(beginTicks + dateNumber * 10000)
(2)直接字符串日期。
字符串日期,常见的是ISO8601 标准。
如:
{Date:"2010-07-12T03:05:21Z"}
JavaScript Parser:
// Parse JSON string value when the string value is ISO Date Format
var
obj = eval('(' + '{Date:"2010-07-12T03:05:21Z"}' + ')');
scanDate(obj, isoDateParser);
var
dateValue = obj["Date"];
function
scanDate(obj, dateParser) {
for
(var
key in obj) {
obj[key] = dateParser(key, obj[key]);
if
(typeof
(obj[key]) === 'object') {
scanDate(obj[key], dateParser);
}
}
}
function
isoDateParser(key, value) { if
(typeof
value === 'string'
) { var
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)(?:([\+-])(\d{2})\:(\d{2}))?Z?$/.exec(value); if
(a) { var
utcMilliseconds = Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]); return
new
Date(utcMilliseconds); } } return
value;}
C# Parser:

string
dateString = "2010-07-12T03:05:21Z";
DateTime
dateValue = DateTime.Parse(dateString);
(3)带分隔符的数字日期。
/Date(NUMBER(+/-)TZD)/
“\/Date(NUMBER(+/-)TZD)\/"
NUMBER是1970年1月1日以来的毫秒数,
TZD是4位数时区的。+和-表示东、西时区。
如果没有时区,则NUMBER是UTC时间。
用/Date()/分隔。\/和\/是对/的转义。JSON.NET和Microsoft AJAX Library用的就是这种格式。
中间的数字也是格林威治时间1970年1月1日以来的毫秒数。和第一种不同是没有采用JavaScript的日期构造器,而是采用了一种自定义的
分隔符。
如:"\/Date(1278903921551)\/"。
JavaScript Parser:

var
obj = eval('(' + "{Date: \/Date(1278903921551)\/}".replace(/\/Date\((\d+)\)\//gi, "new Date($1)") + ')');
var
dateValue = obj["Date"];
C# Parser:

string
dateString = "\\/Date(1278903921551)\\/";
int
startPos = dateString.IndexOf("(")+1;
int
endPos = dateString.LastIndexOf(")")-1;
long
dateNumber = long.Parse(dateString.Substring(startPos, endPos - startPos + 1));
long
beginTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
DateTime
dateValue = new DateTime(beginTicks + dateNumber * 10000);
如:"\/Date(1278903921551+0800)\/"。
JavaScript Parser:
// Parse JSON string value when the string value is JSON Date Format
var obj = eval('(' + '{Date:\/Date(1278903921551+0800)\/}' + ')');
scanDate(obj, jsonDateParser);
var dateValue = obj["Date"];
function scanDate(obj, dateParser) {
for (var key in obj) {
obj[key] = dateParser(key, obj[key]);
if (typeof (obj[key]) === 'object ') {
scanDate(obj[key], dateParser);
}
}
}
function jsonDateParser(key, value) {
if (typeof value === 'string' ) {
var a = (/^/\/Date\((\d+)([\+\-](\d\d)(\d\d))?\)\//gi).exec(value);
if (a) {
var utcMilliseconds = parseInt(a[1], 10)
+ ((a[3] == '-') ? -1 : 1) * (parseInt(a[4], 10) + (parseInt(a[5], 10) / 60.0)) * 60 * 60 * 1000;
return new Date(utcMilliseconds);
}
}
return value;
}
C# Parser:
string dateString = "\\/Date(1278903921551+0800)\\/";
int startPos = dateString.IndexOf("(") + 1;
int endPos = dateString.LastIndexOf(")") - 1;
string dateNumberString = dateString.Substring(startPos, endPos - startPos + 1);
int timeZoneMilSeconds = 0;
int? timeZoneIndex = null;
if (dateNumberString.IndexOf("+") > -1) {
timeZoneIndex = dateNumberString.IndexOf("+");
timeZoneMilSeconds = 1;
}
if (dateNumberString.IndexOf("-") > -1) {
timeZoneIndex = dateNumberString.IndexOf("-");
timeZoneMilSeconds = -1;
}
long dateNumber = 0;
if (timeZoneIndex.HasValue) {
timeZoneMilSeconds = timeZoneMilSeconds * (int)((int.Parse(dateNumberString.Substring(timeZoneIndex.Value + 1).Substring(0, 2))
+ int.Parse(dateNumberString.Substring(timeZoneIndex.Value + 1).Substring(2)) / 60.0) * 60 * 60 * 1000);
dateNumber = long.Parse(dateNumberString.Substring(0, timeZoneIndex.Value)) + timeZoneMilSeconds;
} else {
dateNumber = long.Parse(dateNumberString);
}
long beginTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
DateTime dateValue = new DateTime(beginTicks + dateNumber * 10000);

以上就是常见的JSON的日期格式了。JSON库或者一些AJAX库已经封装了相应的JavaScript的日期的支持,在解析时应
直接使用JSON库自带的解析器。如果需要自定义解析这些日期,可参考上述JavaScript和C#代码。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
加油的英文怎么说,加油的英语怎么写
—Did you visit the museum today?—No. We
阅读《说“木叶”》,回答下面问题:1.文中
简述参加公开招聘原因怎么写
半挂车一年能挣多少钱,yy主播大衣哥的收入状
冰魄银针的毒可以抵御情花之毒?
辐射4的属性点会增加的吗?还是默认26点?
网球中的“抢七局”是什么意思啊?
武汉大学录取分数线 心理学专业2016年
命运,有人认为“人生曲线的走向,皆是上天的
成语什么冠楚楚
食堂卫生标语大全,饭店透明厨房用什么标语
大圆周长和直径的比 小圆周长和直径的比.A
执子之手与子偕老是什么了
双腿靠墙倒立的好处
推荐资讯
阴历1965年9月25日辰时出生今年运气如何
下列各句中加点的成语使用恰当的一项是A. 这
路由器的上网号和宽带连接号一样?
DWR推送技术,客户端刷新太慢~
未来家装饰在大连做的怎么样?
笔记本键盘突然有几个键不好用了,是键盘坏了
名字的含义要在里面啊 一个字一个字解释啊 字
关于写人的作文800字左右
拍打手时手指尖会胀痛是什么原因
调整型文胸哪些牌子,国内内衣品牌有哪些
橡胶重量计算公式,只有一张橡胶件图纸,怎么
关于茶国际化的口号,求一句茶叶品牌宣传标语
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?