JSON数据传输大法第一式——用OADate处理日期格式-编程思维

JSON作为一种轻量级的数据交换格式,通常采用完全独立于编程语言的文本格式来存储和表示数据。它的层次结构简洁清晰,易于人们的阅读和编写,此外机器编写和生成也会变得容易,可以有效地提升网络传输效率,这些因素使得JSON成为理想的数据交换语言。

由于JSON的使用方式十分简单,这个方便的传输形式很快就风靡Web世界,并且成为ECMA标准。几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。把JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。

JSON的使用

JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

创建包含 JSON 语法的 JavaScript 字符串:

var txt = '{ "employees" : [' +      
'{ "firstName":"John" , "lastName":"Doe" },' +        
'{ "firstName":"Anna" , "lastName":"Smith" },' +       
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';

由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。

eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:

var obj = eval ("(" + txt + ")");

除此之外的常用方法还有:

1、map转换成json

JSONObject json = new JSONObject(map);

2、String转换成json

JSONObject.parseObject(StringText)

3、List转换成json

JSONArray json = new JSONArray(list);

4、json转换成List

list = JSONObject.parseArray(list,String.class)

但其实我们在进行数据传输的时候,除了我们常见的数据如数组等格式之外,"时间"也是数据传输中的重要类型。

OADate的处理

有个玩笑说,企业数据化的尽头的就是数据表格,数据表中重要的一项就是时间数据。

相信有用过日期格式并进行过json数据导出的小伙伴应该不难发现,当单元格的值是一个日期时,我们导出的日期数据会被储存为OADate。

(图片来自网络)

通常情况下我们使用OADate是为了解决日期序列化以及时区问题,所以我们使用这种特殊的方式保存日期。但是很多情况下我们需要对日期数据进行一些处理,但是无奈的是不知如何进行转换。

今天——它来了,它来了,葡萄带着教程走来啦。

接下来我们来解决JSON日期格式数据处理问题,且针对不同编程环境都有解决方案。

首先我们来看前端。

function fromOADate(date) {
            var oaDateReg = new RegExp('^/OADate\\(([-+]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)\\)/\\s*

);
            if (typeof date === "string" && oaDateReg.test(date)) {
                var oadate = parseFloat(date.match(oaDateReg)[1]);
                var ms = (oadate * 86400000 * 1440 - 25569 * 86400000 * 1440 + new Date((oadate - 25569) * 86400000).getTimezoneOffset() * 86400000 ) / 1440;
                return new Date(ms);
            }else{
                return date;
            }
        }

除了上述介绍的内容外,还有一个取巧的办法就是通过tag进行一个转换:

sheet.tag("/OADate(44542)/");
var date = sheet.tag();

后端java环境下:

long d = 44542;
        double  mantissa = d - (long) d;
        double hour = mantissa*24;
        double min =(hour - (long)hour) * 60;
        double sec=(min- (long)min) * 60;

        SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy");
        Date baseDate = myFormat.parse("30 12 1899");
        Calendar c = Calendar.getInstance();
        c.setTime(baseDate);
        c.add(Calendar.DATE,(int)d);
        c.add(Calendar.HOUR,(int)hour);
        c.add(Calendar.MINUTE,(int)min);
        c.add(Calendar.SECOND,(int)sec);

        System.out.println(c.getTime());


最后的,.net环境只需一句代码就能搞定

System.DateTime.FromOADate(44542)

怎样,学"废"了吗?

了解更多前端表格中的数据操作处理:https://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html?id=135

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/powertoolsteam/p/16287833.html

“银行家算法”大揭秘!在前端表格中利用自定义公式实现“四舍六入五成双”-编程思维

银行的盈利模式是什么?三个字:信息差!从储户手中收拢资金,然后放贷出去,而所谓的“利润”就是这其中的利息差额。 在我国,人民银行规定每个季度月末的20号为银行结息日,每一年四次结息,因此每年需要非常频繁的计算付给储户的利息。在计算利息时,小数点如何处理就变得很重要,并成为决定利润多少的关键细节。 (图片来自于网络)

【前端干货】别再羡慕别人的Excel啦,教你点击按钮直接打开侧边栏!-编程思维

负责技术支持的葡萄又来啦。 三日不见,我们的客户又为我们发来新的问题。 这次我们需要实现的场景是在前端表格环境中,像模板按钮那样,点击之后弹出一个侧边栏,然后通过点击不同的单元格显示不同的内容。 挤接下来我们就带大家一起来看看,如何在前端电子表格中实现这样的功能。 实例操作 首先,常规地我们先常规地在编辑器的ribb

如何在 30 分钟完成表格增删改查的前后端框架搭建-编程思维

30分钟,你可以做什么? 可以风卷残云的饱餐一顿;可以简单地打扫一下房间;或者可以跳10十遍刘畊宏《本草纲目》毽子操。 而今天,本葡萄要带你在30分钟内完成一套拥有增删改查表格系统的前后端搭建! 在日常的系统开发中,表格(Grid)是最常见的数据表达形式,而表格中“增删改查”又是最常见的功能之一。所以在日常开发过程中

高危!Fastjson反序列化远程代码执行漏洞风险通告,请尽快升级-编程思维

据国家网络与信息安全信息通报中心监测发现,开源Java开发组件Fastjson存在反序列化远程代码执行漏洞。攻击者可利用上述漏洞实施任意文件写入、服务端请求伪造等攻击行为,造成服务器权限被窃取、敏感信息泄漏等严重影响。 据统计,此次事件影响Fastjson 1.2.80及之前所有版本。目前, Fastjson最新版本1

构建基于React18的电子表格程序-编程思维

背景 2022年3月29日,React正式发布18.0.0。本次升级内容包括开箱即用的改进,如自动批处理、新的API(如startTransition)和支持Suspense 的流式服务器端渲染。关于此次发布新增的功能可以参考官方文档。 作为一个构建用户界面的JavaScript 库,React一直被认为是一个严谨而优

“银行家算法”大揭秘!在前端表格中利用自定义公式实现“四舍六入五成双”-编程思维

银行的盈利模式是什么?三个字:信息差!从储户手中收拢资金,然后放贷出去,而所谓的“利润”就是这其中的利息差额。 在我国,人民银行规定每个季度月末的20号为银行结息日,每一年四次结息,因此每年需要非常频繁的计算付给储户的利息。在计算利息时,小数点如何处理就变得很重要,并成为决定利润多少的关键细节。 (图片来自于网络)

【前端干货】别再羡慕别人的Excel啦,教你点击按钮直接打开侧边栏!-编程思维

负责技术支持的葡萄又来啦。 三日不见,我们的客户又为我们发来新的问题。 这次我们需要实现的场景是在前端表格环境中,像模板按钮那样,点击之后弹出一个侧边栏,然后通过点击不同的单元格显示不同的内容。 挤接下来我们就带大家一起来看看,如何在前端电子表格中实现这样的功能。 实例操作 首先,常规地我们先常规地在编辑器的ribb

数据大屏,仅仅是数据展示吗?-编程思维

数据大屏,仅仅是数据展示吗? 大数据时代,各行各业对数据价值的重视程度与日俱增。要想真正把数据的价值发挥出来,就需要对数据进行采集、加工、分析,最终以数据可视化的方式来展现数据分布的规律和特征,进而辅助决策。目前,数据大屏作为数据可视化的重要载体,已成为经营管理、指挥调度、战略决策、应急监控等场景下必不可少的一部分。,

如何在 30 分钟完成表格增删改查的前后端框架搭建-编程思维

30分钟,你可以做什么? 可以风卷残云的饱餐一顿;可以简单地打扫一下房间;或者可以跳10十遍刘畊宏《本草纲目》毽子操。 而今天,本葡萄要带你在30分钟内完成一套拥有增删改查表格系统的前后端搭建! 在日常的系统开发中,表格(Grid)是最常见的数据表达形式,而表格中“增删改查”又是最常见的功能之一。所以在日常开发过程中

高危!Fastjson反序列化远程代码执行漏洞风险通告,请尽快升级-编程思维

据国家网络与信息安全信息通报中心监测发现,开源Java开发组件Fastjson存在反序列化远程代码执行漏洞。攻击者可利用上述漏洞实施任意文件写入、服务端请求伪造等攻击行为,造成服务器权限被窃取、敏感信息泄漏等严重影响。 据统计,此次事件影响Fastjson 1.2.80及之前所有版本。目前, Fastjson最新版本1

主管发话:一周搞不定用友U8 ERP跨业务数据分析,明天就可以“毕业”了-编程思维

随着月末来临,又到了汇报总结的时刻。 (图片来自网络) 到了这个特殊时期,你的老板就一定想要查看企业整体的运转情况、销售业绩、客户实况分析、客户活跃度、Top10 sales、 产品情况、订单处理情况等信息。 对业务有一定了解的同学就会明白,整理出这些内容需要跨业务、跨功能模块,对数据进行整合。 而每次当领导下达数据