.NET Core 1.1日期解析无APi、SQL Server数据转换JSON

简介: 前言 在批量导入Excel中的数据时发现出生日期为整数也就是为天数,结果倒腾了翻,这是其一,其二是数据库中的某一列存的是JSON数据,但是场景是为了作为作业来运行,此时不得不将筛选出的数据手动拼接成JSON,给需要的童鞋铺一点路。

前言

在批量导入Excel中的数据时发现出生日期为整数也就是为天数,结果倒腾了翻,这是其一,其二是数据库中的某一列存的是JSON数据,但是场景是为了作为作业来运行,此时不得不将筛选出的数据手动拼接成JSON,给需要的童鞋铺一点路。

日期问题

在Excel中我们给出的出生日期则是正确的日期格式,比如如下:

但是呢,当我们导入数据时发现将其日期转换成了天数,这其实也没什么问题,但是项目是在.NET Core中,则出现了一点问题,在.NET Framework中,如果我们获取到的出生日期是double型数字即天数时,我们该如何将其转换为对应的日期呢,请看如下:

 var birthDate = DateTime.FromOADate(33243);

 

此时我们通过 DateTime.FromOADate 方法能够解析出日期,下面我们再来看看目前.NET Core版本为1.1中的情况:

此时你会发现如下在.NET Core 1.1中并未有此方法。

既然在Excel导入时为天数我们将日期添加天数不就行了吗,在NET Core 1.1中只能通过手动去转换了。我们来看下:

 var birthDate = DateTime.Now.AddDays(-33243);

此时得到的日期如下:

我们上述通过.NET Framework中的得到的日期为 1991-01-05 而此时得到的却为 1992-03-06 ,转换失败。上述我们是通过当前日期去减去天数导致转换失败,此时我们改变思路,从某个日期加上这个日期是不是就可以了呢。日期最小从 1899-12-31 开始,所以我们接下来进行下操作:

var birthDate = new DateTime(1899, 12, 31).AddDays(33509);

此时得到的结果如下:

上述演示得到的结果为 1991-09-29 ,而我们在Excel中的日期为 1991-09-28 后经过查阅资料发现,这个是Excel中的一个Bug,此时我们还需要进行如下操作才行。

            var days = 33509;
            if(days>59)
                days-=1;
            var birthDate = new DateTime(1899, 12, 31).AddDays(days);

在Excel中的日期多加了一天,类似如下:

想到这里,从正向角度去看待,Excel中我们定义为日期型,而为何会进行转换为天数了呢,我们看看Excel中格式设置。

原来是这样,默认是常规,那么我们是否可以设置自定义日期格式呢。

我们自定义格式为日期格式就不用再去读取时进行转换了,岂不爽哉,我们看看结果:

 

无论是从根本和利用代码去转换皆可解决问题,上述我们从Excel问题出发估计还保险一点。

SQL Server数据转换为JSON

利用代码转换为JSON简直是SO EASY。但是上述也已经表明了场景,直接通过存储过程筛选数据并将数据存储为JSON字符串来进行短信通知,下面我们来看看,创建测试表。

CREATE TABLE ProductList 
(Id INT IDENTITY(1,1) PRIMARY KEY, 
ProductName VARCHAR(500), 
Price NUMERIC(18,2), 
Quantity INT, Inserton DATETIME
)

插入测试数据:

INSERT INTO  ProductList
        (
        ProductName,
        Price,
        quantity,
        Inserton
        )
 VALUES ('Digital camera',20000,5,getdate()),('Laptop',10000,5,getdate())

接下来我们要将其先转换为XML,通过FOR XML PATH,如下:

SELECT * 
FROM ProductList 
FOR XML PATH('Jeffcky')

上述就无需我再多讲,FOR XML PATH参数定义为XML根节点名称

展开XML,则是如下XML数据

在SQL Server 2016有了对JSON解析的支持还是挺好,在SQL Server 2012中没有只能借用STUFF函数来拼接了。

DECLARE @content VARCHAR(MAX)

SET @content = (SELECT '['+ 
STUFF(
(
SELECT TOP 2 ',
{"ProductName": "' + ProductName + '",
"Price": "' + CONVERT(VARCHAR, Price) + '",
"Quantity": "' + CONVERT(VARCHAR, quantity) + '",
"Inserton": "' + CONVERT(VARCHAR, Inserton, 105) + '"}'
 FROM ProductList 
 FOR XML PATH('')), 1, 1,''
 ) 
 + ']'[ProductDetail])

 PRINT @content

此时我们发现多了 &#x0D 恰巧应该是换行导致的,我们将其放在一行数据上即可。

DECLARE @content VARCHAR(MAX)

SET @content = (SELECT '['+ STUFF((SELECT TOP 2 ',{"ProductName": "' + ProductName + '","Price": "' + CONVERT(VARCHAR, Price) + '","Quantity": "' + CONVERT(VARCHAR, quantity) + '","Inserton": "' + CONVERT(VARCHAR, Inserton, 105) + '"}' FROM ProductList 
 FOR XML PATH('')), 1, 1,''
 ) 
 + ']'[ProductDetail])

 PRINT @content

此时则能正常输出:

总结

.NET Core 1.1中尚未有将天数转换成日期的APi,期待2.0能有更多的APi供我们使用。

目录
相关文章
|
API 数据处理 开发者
获取淘宝分类详情:深入解析taobao.cat_get API接口
淘宝开放平台推出的`taobao.cat_get` API接口,帮助开发者和商家获取淘宝、天猫的商品分类详情。该接口支持获取类目列表、属性及父类目信息,通过指定分类ID(cid)实现精准查询,并提供灵活的参数设置和高效的数据处理。使用流程包括注册账号、创建应用、获取App Key/Secret、构造请求、发送并解析响应。示例代码展示了如何用Python调用此API。开发者可借此为电商项目提供数据支持。
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
自然语言处理 算法 API
阿里云增值税发票识别NET Rest API调用示例
本文介绍了使用NET代码调用阿里云增值税发票识别API的实现方式。通过示例代码,详细展示了如何构造请求、设置签名以及发送HTTP请求的具体步骤。代码中涵盖了请求参数的处理、签名生成逻辑(如HMAC-SHA256算法)以及调用API后的结果处理。此外,还提供了运行结果的截图和参考文档链接,帮助开发者更好地理解和应用该接口。
1408 4
|
机器学习/深度学习 人工智能 自然语言处理
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
928 12
|
数据采集 监控 搜索推荐
深度解析淘宝商品详情API接口:解锁电商数据新维度,驱动业务增长
淘宝商品详情API接口,是淘宝开放平台为第三方开发者提供的一套用于获取淘宝、天猫等电商平台商品详细信息的应用程序接口。该接口涵盖了商品的基本信息(如标题、价格、图片)、属性参数、库存状况、销量评价、物流信息等,是电商企业实现商品管理、市场分析、营销策略制定等功能的得力助手。
|
供应链 搜索推荐 API
深度解析1688 API对电商的影响与实战应用
在全球电子商务迅猛发展的背景下,1688作为知名的B2B电商平台,为中小企业提供商品批发、分销、供应链管理等一站式服务,并通过开放的API接口,为开发者和电商企业提供数据资源和功能支持。本文将深入解析1688 API的功能(如商品搜索、详情、订单管理等)、应用场景(如商品展示、搜索优化、交易管理和用户行为分析)、收益分析(如流量增长、销售提升、库存优化和成本降低)及实际案例,帮助电商从业者提升运营效率和商业收益。
631 20
|
JSON 缓存 API
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
729 12
|
开发框架 数据可视化 .NET
.NET 中管理 Web API 文档的两种方式
.NET 中管理 Web API 文档的两种方式
365 14
|
XML API 开发者
使用 API 接口获取京东商品详情全解析
京东作为头部电商平台,其商品数据极具价值。开发者可通过API接口获取商品详情、订单数据等信息,满足各种业务需求。使用前需注册账号并创建应用获取App Key和App Secret。调用流程包括认证授权、构建请求、发送请求及处理响应。注意事项包括遵守平台规则、控制调用频率和确保数据时效性。通过这些步骤,可为电商数据分析提供有力支持。

推荐镜像

更多
  • DNS