C# 接口中DateTime类型字段返回年月日格式,去掉时分秒的数据

article/2025/11/9 0:00:27

背景

在我们平时写接口的时候,避免不了这样一个问题,数据库中存的字段类型为datetime,代码中对应的实体类也是DateTime类型的字段,于是在读取数据库内容之后返回的数据也是DateTime类型的值,比如2022-10-24 18:34:56.110,但是对于服务器请求者来说,他们可能只需要显示年月日即可,后面的时分秒是不需要的,如果能说服他们,不用修改我们的代码,当日最好。那么对于我们服务提供者来说,如何处理这类问题呢?

实现方式1

可以直接把返回的实体类中的DateTime修改为string,格式就可以自定义了,但是缺点也很明显,

1.无法使用ToListMapTo等方式直接把数据库中读取的DateTime值直接转换成String
2.若有多个接口需要修改,比较麻烦。
3.适用情况单一,若有别的字段类型修改,比较麻烦。

实现方式2(推荐)

采用JsonConverterAttribute类和JsonConverter<T>类,通过给属性加特性类的方式进行修改。
实现的简要步骤如下。
这里我新建个一个ASP.NET Core Web API的项目,来做示范。项目建好之后内容如下。
WeatherForecastController.cs内容如下。

using Microsoft.AspNetCore.Mvc;namespace DateTime返回年月日.Controllers
{[ApiController][Route("[controller]")]public class WeatherForecastController : ControllerBase{private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};private readonly ILogger<WeatherForecastController> _logger;public WeatherForecastController(ILogger<WeatherForecastController> logger){_logger = logger;}[HttpGet(Name = "GetWeatherForecast")]public IEnumerable<WeatherForecast> Get(){return Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = Random.Shared.Next(-20, 55),Summary = Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray();}}
}

Get 接口中,返回了一个WeatherForecast的一个数组,在这个实体类中,有一个DateTime类型的字段Date,我们请求下接口看下返回值。
在这里插入图片描述
这里可以看到,Date字段返回的是一个包含年月日,并且还有时区的一个字符串。
WeatherForecast实体类如下

using System.Text.Json.Serialization;namespace DateTime返回年月日
{public class WeatherForecast{public DateTime Date { get; set; }public int TemperatureC { get; set; }public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);public string? Summary { get; set; }}
}

重点来了。参考https://docs.microsoft.com/zh-cn/dotnet/api/system.text.json.serialization.jsonconverterattribute?view=net-6.0
在这里插入图片描述
JsonConverterAttribute可用反射的方式指定一个转换器类。那么我们就新建一个名为DateOnlyConverter的类,继承JsonConverter<T>这个泛型类,其中需要指定类型为DateTime,内容如下。

using System.Text.Json;
using System.Text.Json.Serialization;namespace DateTime返回年月日
{public class DateOnlyConverter : JsonConverter<DateTime>{public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options){throw new NotImplementedException();}public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options){writer.WriteStringValue(value.ToString("yyyy-MM-dd"));}}
}

JsonConverter<T>包含两个抽象接口必须添加对应的实现,ReadWrite,我们只需要修改具体的Write方法,实现内容也非常简单,就是把对应的类型进行转换。
最后在WeatherForecast类的Date属性上添加上对应的特性。

using System.Text.Json.Serialization;namespace DateTime返回年月日
{public class WeatherForecast{[JsonConverter(typeof(DateOnlyConverter))]public DateTime Date { get; set; }public int TemperatureC { get; set; }public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);public string? Summary { get; set; }}
}

最后来看下调用结果吧。
在这里插入图片描述
通过添加特性的方式,不用修改实体类的类型,也不用修改具体的业务逻辑。

结语

参考内容:
https://docs.microsoft.com/zh-cn/dotnet/api/system.text.json.serialization.jsonconverter-1?view=net-6.0

have a wonderful day.


http://chatgpt.dhexx.cn/article/GRo67yoA.shtml

相关文章

vue3-用dayjs将时间戳转为年月日格式

已知&#xff0c;格式化时间&#xff1a;dayjs(cellValue).format(YYYY-MM-DD) 用法&#xff1a; import dayjs from dayjs;dayjs(时间戳).format(YYYY-MM-DD HH:mm:ss); 如&#xff0c;在get请求中使用&#xff1a; service.get(/trace/sourceSearchInput.value).then(res …

Java但中获取时间将时间转换成字符串格式(年月日格式)

一:直接上马拿走&#xff1a; package cn.wyj.one;import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;/*** 测试时间对象和字符串之间的相互转化* DateFormat抽象类和SimpleDateFormat实现类的使用* author 86155**/public class Demo2…

Excel修改日期格式:日月年-年月日

最近处理数据&#xff0c;遇到需要处理一下日期格式&#xff0c;记一下。。。 1、原格式 2、新建Excel表&#xff0c;复制到表中&#xff0c;选择列&#xff0c;数据-分列&#xff0c;下一步…,选择列格式为“DMY”,点击完成 3、效果(若不成功&#xff0c;可以试一试其他的)

各种加密证书

证书相关知识 PFX文件属于数字证书。pfx数字证书既包含有公钥又包含私钥&#xff0c;cer | crt数字证书只包含公钥。参考 JKS&#xff08;Java Key Store&#xff09;就是利用Java Keytool 工具生成的Keystore文件&#xff0c;JKS文件由公钥和密钥构成&#xff0c;其中的公钥…

公钥,私钥,数字签名,证书

今天&#xff0c;我读到一篇好文章。 它用图片通俗易懂地解释了&#xff0c;"数字签名"&#xff08;digital signature&#xff09;和"数字证书"&#xff08;digital certificate&#xff09;到底是什么。 我对这些问题的理解&#xff0c;一直是模模糊糊…

国密SSL证书保障网站安全

国内很多网站为了网站安全都会部署SSL证书&#xff0c;目前市面上申请到的SSL服务器证书基本都是采用RSA国际算法&#xff0c;市场上80%的SSL服务器证书都是由国外CA尤其是美国为主的CA签发的证书。 网络安全就是国家安全&#xff0c;网络安全的对手也已经不仅仅是黑客&#xf…

构建用于签名/加密双证书测试体系的可执行命令

注意事项 生成证书请求的填写 范例Subject: C CN, ST Beijing, L Beijing, O MSI, OU msi, CN ca, emailAddress cagmssl.com 前面的步骤存在错误&#xff0c;后面改用脚本进行证书生成&#xff0c;阅读时请跳过前面错误的内容 错误的内容 -> 开始 CA 生成私钥 o…

来此加密证书申请,验证,自动部署

之前用certbot, 后来一直不报错, 证书不管用, 就想着干脆直接使用来此加密, 不要中间商了, 就有了直接到来此加密注册之旅 注册地址: 来此加密https://letsencrypt.osfipin.com/user-0408/order/list附上这两年的"战绩" 申请这么多证书主要原因是, 测试域名太多, 一…

加密和数字证书

目录 一 KPI概述二 KPI应用1 内容安全加密2 加密文件3 使用非对称加密对称加密密钥4 非对称加密的缺点5 数字签名6 数字证书7 时钟服务8 私钥使用者认证9 总结附&#xff1a;U盾的工作原理介绍 三 详解公钥、私钥、数字证书的概念1 加密和认证2 公钥和私钥3 证书4 总结5 签名证…

加密解密和CA证书杂记

最近两三个月&#xff0c;断断续续的一直在处理CA证书相关的事情。CA证书本质上也是一种加解密&#xff0c;因此就自然而然的涉及到一些加密和解密的技术&#xff0c;这就让我在了解CA的同时&#xff0c;也对加密和解密有了更进一步的认识和理解。 以下便是一个比较杂&#xff…

证书和加解密

刚进公司&#xff0c;在实习期需要了解很多关于加解密算法和证书相关的东西&#xff0c;我以写博客的方式把我近1个多月了解的东西整理出来传授给大家&#xff0c;大家觉得可以的话请不要吝啬你们的赞。 目录 什么是PKI 证书申请流程 加密与解密 签名认证 数字信封 数字…

HTTPS(对称加密+非对称加密+证书)

目录 1. 加密和解密 HTTPS工作过程 2. 对称加密 3. 对称加密 4. 既然都有非对称加密了,那为啥还要有对称加密 5. 中间人攻击 6. 引入证书 HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在…

非对称加密与数字证书

文章目录 1 非对称加密2 数字签名3 数字证书4 数字签名和数字证书的区别5 CA 认证中心如何保证权威性6 HTTPS 协议7 HTTPS 与 SSL8 为什么不一直使用HTTPS 1 非对称加密 非对称加密&#xff0c;是指不能从加密密钥推算出解密密钥。加密密钥不需要保密&#xff0c;可以公开&…

安全和加密CA证书

一、介绍 1、为什么要加密 ※ 不加密流量的易受攻击性 ● 密码/数据嗅探 ● 数据操作 ● 验证操作 ● 相当于邮寄明信片 ※ 不安全的传统协议 --明文 ● telnet、FTP、POP3等等&#xff1b;不安全密码 ● http.smtp、…

安全-加密与证书

对称加密 在对称加密中&#xff0c;加密和解密使用的是同一个密钥&#xff0c;即&#xff1a;使用相同的密钥对密文进行加密和解密 比如&#xff1a;A和B&#xff0c;A和B保存同一个密钥&#xff0c;A使用这个密钥对明文进行加密&#xff0c;发送给B&#xff0c;B再使用这个密…

加密、签名、证书的基础概念和流程

常用加密算法类型&#xff1a; 加密算法&#xff1a;对称加密 &#xff08;可逆&#xff09; 常用算法 DES&#xff08;Data Encryption Standard&#xff09;&#xff1a;数据加密标准&#xff0c;速度较快&#xff0c;适用于加密大量数据的场合&#xff1b;&#xff08;已…

ssl证书加密方式有哪些?

SSL证书是HTTP明文协议书升级HTTPS加密协议必需的ca证书。ssl证书主要是通过https加密方式实现网站及用户的安全性。那么&#xff0c;你可知道ssl证书加密方式有哪些&#xff1f;一起来看看。 ssl证书加密方式有哪些 ssl证书加密方式1.Base64位数据加密&#xff08;可加密解密…

RK-MPP硬件编解码库介绍和使用

一、下载RK-MPP硬件编解码库 下载链接&#xff1a;https://github.com/rockchip-linux/mpp 二、RK-MPP库介绍 1、资料来源&#xff1a;MPP 开发参考.pdf 2、MPP说明 MPP&#xff08;Media Process Platform &#xff09;是rk提供的一款硬件编解码库&#xff0c;为用户空间屏蔽…

第二季1:MPP模块概述

以下内容源于海思官方文档内容&#xff0c;如有侵权请告知删除。 一、MPP模块概述 海思的媒体处理软件平台&#xff08;MPP&#xff0c;Media Process Platform&#xff09;有利于应用软件的快速开发。因为该平台屏蔽了一些与芯片相关的复杂的底层处理&#xff0c;给应用软件提…

从系统架构角度出发,服务器该如何分类?MPP 是什么?

写在前面 本文隶属于专栏《100个问题搞定大数据理论体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和文献引用请见100个问题搞定大数据理论体系 解答 从系统架构来…