当前位置: 首页 > news >正文

使用.NET 8构建高效的时间日期帮助类

使用.NET 8构建高效的时间日期帮助类

在现代Web应用程序中,处理日期和时间是一个常见的需求。无论是记录日志、生成报告还是进行数据分析,正确处理日期和时间对于确保数据的准确性和一致性至关重要。本文将详细介绍如何使用ASP.NET Core和C#构建一个高效的时间日期帮助类,并展示其使用方法。

技术栈

  • .NET 8: 提供强大的API开发框架。
  • C#: 用于编写高效的业务逻辑。

代码实现

DateTimeHelper

我们创建了一个名为DateTimeHelper的帮助类,它提供了多种日期时间相关的功能,包括格式化日期时间和调整查询时间范围。

1. 常量定义

首先,我们定义了一些常用的常量,用于表示不同的时间跨度,例如1天、7天、30天等。

namespace MES.Core.Helpers
{/// <summary>/// 日期时间帮助类,提供日期时间格式化及查询范围调整功能/// </summary>public class DateTimeHelper{/// <summary>/// 日期时间格式:yyyy-MM-dd HH:mm:ss/// </summary>public const string DateTimeFormat = @"yyyy-MM-dd HH:mm:ss";/// <summary>/// 1天的时间跨度/// </summary>public const int Day1 = 1;/// <summary>/// 7天的时间跨度/// </summary>public const int Day7 = 7;/// <summary>/// 15天的时间跨度/// </summary>public const int Day15 = 15;/// <summary>/// 30天的时间跨度/// </summary>public const int Day30 = 30;/// <summary>/// 60天的时间跨度/// </summary>public const int Day60 = 60;/// <summary>/// 90天的时间跨度/// </summary>public const int Day90 = 90;
2. 获取当前时间

GetThisDateTime方法用于获取当前时间并将其格式化为指定的格式。

        /// <summary>/// 获取当前时间并格式化为指定格式/// </summary>/// <returns>格式化后的当前时间</returns>public static DateTime GetThisDateTime(){return Convert.ToDateTime(DateTime.Now.ToString(DateTimeFormat));}
3. 调整查询时间范围

AdjustQueryRange方法根据提供的开始时间和结束时间调整查询范围,以确保查询结果在合理的范围内。

        /// <summary>/// 根据提供的开始时间和结束时间调整查询范围/// </summary>/// <param name="start_time">开始时间</param>/// <param name="end_time">结束时间</param>/// <param name="timeHorizon">时间范围,默认30天</param>/// <returns>包含调整后的开始和结束时间的元组</returns>public static Tuple<DateTime, DateTime> AdjustQueryRange(DateTime? start_time, DateTime? end_time, int timeHorizon = Day30){// 默认设置开始时间为当前时间减去指定时间范围(默认30天)DateTime startTime = DateTime.Now.AddDays(-(timeHorizon - 1));// 默认设置结束时间为当前时间加1天DateTime endTime = DateTime.Now.AddDays(1);// 如果仅提供了开始时间if (start_time != null && end_time == null){startTime = (DateTime)start_time;// 确保结束时间在开始时间之后且不超过指定时间范围if (startTime.AddDays(timeHorizon) < endTime) endTime = startTime.AddDays(timeHorizon);}// 如果仅提供了结束时间if (start_time == null && end_time != null){endTime = (DateTime)end_time;// 确保开始时间在结束时间之前且不超过指定时间范围if (endTime.AddDays(-timeHorizon) < startTime) startTime = endTime.AddDays(-timeHorizon);}// 如果提供了开始和结束时间if (start_time != null && end_time != null){startTime = (DateTime)start_time;endTime = (DateTime)end_time;// 确保结束时间在开始时间之后且不超过指定时间范围if (startTime.AddDays(timeHorizon) < endTime) endTime = startTime.AddDays(timeHorizon);}// 返回调整后的开始和结束时间return Tuple.Create(startTime, endTime);}}
}

调用示例

以下是如何调用AdjustQueryRange方法的示例:

// 定义开始时间和结束时间
DateTime? startTime = new DateTime(2023, 10, 1);
DateTime? endTime = null;// 调用方法调整时间范围
var (adjustStartTime, adjustEndTime) = DateTimeHelper.AdjustQueryRange(startTime, endTime, DateTimeHelper.Day30);Console.WriteLine($"Adjusted Start Time: {adjustStartTime}");
Console.WriteLine($"Adjusted End Time: {adjustEndTime}");

总结

通过上述步骤,我们实现了一个高效的时间日期帮助类,能够方便地格式化日期时间和调整查询时间范围。该类不仅提高了代码的可读性和维护性,还确保了日期时间处理的一致性和准确性。

希望这篇文章对你有所帮助!如果你有任何问题或建议,请在评论区留言,我会尽力解答。

相关文章:

使用.NET 8构建高效的时间日期帮助类

使用.NET 8构建高效的时间日期帮助类 在现代Web应用程序中&#xff0c;处理日期和时间是一个常见的需求。无论是记录日志、生成报告还是进行数据分析&#xff0c;正确处理日期和时间对于确保数据的准确性和一致性至关重要。本文将详细介绍如何使用ASP.NET Core和C#构建一个高效…...

学习std::is_base_of笔记

1、std::is_base_of简介 在现代 C 中&#xff0c;模板元编程&#xff08;Template Metaprogramming&#xff09;是一种非常强大的编程技巧&#xff0c;它让我们能够在编译期进行类型推导和约束。而 std::is_base_of 是一个重要的工具&#xff0c;可以用来检查一个类型是否是另…...

第 25 场 蓝桥月赛

3.过年【算法赛】 - 蓝桥云课 问题描述 蓝桥村的村民们正准备迎接新年。他们计划宰杀 N 头猪&#xff0c;以庆祝一整年的辛勤劳作和丰收。每头猪的初始位置位于下标 xi​&#xff0c;所有 xi​ 均为偶数&#xff0c;保证没有两头猪初始位置相同。 当猪意识到人类打算宰杀它们…...

【设计模式-行为型】访问者模式

一、什么是访问者模式 说起来访问者模式&#xff0c;其实很少用。我一直在思考该用什么样的例子把这个设计模式表述清晰&#xff0c;最近突然想到一个例子也许他就是访问者。港片有过很辉煌的年代&#xff0c;小的时候一直在看港片觉得拍的非常好&#xff0c;而且演员的演技也在…...

无人机微波图像传输数据链技术详解

无人机微波图像传输数据链技术是无人机通信系统中的关键组成部分&#xff0c;它确保了无人机与地面站之间高效、可靠的图像数据传输。以下是对该技术的详细解析&#xff1a; 一、技术原理 无人机微波图像传输数据链主要基于微波通信技术实现。在数据链路中&#xff0c;图像数…...

SpringCloud系列教程:微服务的未来(十七)监听Nacos配置变更、更新路由、实现动态路由

前言 在微服务架构中&#xff0c;API 网关是各个服务之间的入口点&#xff0c;承担着路由、负载均衡、安全认证等重要功能。为了实现动态的路由配置管理&#xff0c;通常需要通过中心化的配置管理系统来实现灵活的路由更新&#xff0c;而无需重启网关服务。Nacos 作为一个开源…...

【QT】 控件 -- 显示类

&#x1f525; 目录 [TOC]( &#x1f525; 目录) 1. 前言 2. 显示类控件2.1 Label 1、显示不同文本2、显示图片3、文本对齐、自动换行、缩进、边距4、设置伙伴 3.2 LCD Number 3.3 ProgressBar 3.4 Calendar Widget 3. 共勉 &#x1f525; 1. 前言 之前我在上一篇文章【QT】…...

反馈驱动、上下文学习、多语言检索增强等 | Big Model Weekly 第55期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 01 A Bayesian Approach to Harnessing the Power of LLMs in Authorship Attribution 传统方法严重依赖手动特征&#xff0c;无法捕捉长距离相关性&#xff0c;限制了其有效性。最近的研究利用预训练语言模型的…...

CF 41A.Translation(Java实现)

题目分析 根据示例千言万语一句话&#xff0c;reverse 思路分析 将读取的值分ab&#xff0c;再将b.reverse和a比较&#xff0c;一样就YES 代码 import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String …...

14【学历和能力哪个更重要】

这是很多学习的人有的一个疑问&#xff0c;并提出想让我发表下看法&#xff0c;前面一直没空&#xff0c;我刚好完结了一个项目&#xff0c;最近又有时间更新图文课程了&#xff0c;就展开来讲讲 主流的说法有2个 1&#xff1a;学历重要&#xff0c;依据是很多公司招聘都有学历…...

Learning Vue 读书笔记 Chapter 2

2. Vue 基本工作原理 2.1 Virtual DOM 概念&#xff1a; DOM: DOM以内存中树状数据结构的形式&#xff0c;代表了网页上的HTML&#xff08;或XML&#xff09;文档内容。它充当了一个编程接口&#xff0c;将网页与实际的编程代码&#xff08;如JavaScript&#xff09;连接起来…...

SpringBoot支持动态更新配置文件参数

前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1a;Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。 博主所有博客文件…...

开发技巧,vue 中的动态组件的引用 component + is

在项目中很多时候有切换 tab 的场景&#xff0c;一般来说都是用 v-if 或者 v-show 然后根据各种条件来控制显示隐藏。 其实我们可以使用 vue 中的动态组件&#xff0c;也能实现这个效果 <!-- currentTab 改变时组件也改变 --> <component :is"currentTab"…...

基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API

前言&#xff1a; 本片博客只讲述了操作的大致流程&#xff0c;具体实现步骤并不标准&#xff0c;请以参考为准。 本文前提&#xff1a;熟悉使用webSocket 如果大家还不了解什么是WebSocket&#xff0c;可以参考我的这篇博客&#xff1a; rWebSocket 详解&#xff1a;全双工…...

PSD是什么图像格式?如何把PSD转为JPG格式?

在图形设计的世界里&#xff0c;Photoshop 文档&#xff08;PSD&#xff09;格式是 Adobe Photoshop 的原生文件格式&#xff0c;它允许设计师保存图像中的图层、蒙版、透明度和不同色彩模式等信息。对于需要进一步编辑的设计作品来说&#xff0c;PSD 文件提供了极大的灵活性。…...

c语言中mysql_query的概念和使用案例

在 C 语言中&#xff0c;使用 MySQL 数据库需要用到 MySQL C API。mysql_query() 函数是 MySQL C API 中的一个函数&#xff0c;用于执行 SQL 语句。 概念 mysql_query() 函数的原型如下&#xff1a; int mysql_query(MYSQL *mysql, const char *stmt_str)mysql&#xff1a;…...

一次端口监听正常,tcpdump无法监听到指定端口报文问题分析

tcpdump命令&#xff1a; sudo tcpdump -i ens2f0 port 6471 -XXnnvvv 下面是各个部分的详细解释&#xff1a; 1.tcpdump: 这是用于捕获和分析网络数据包的命令行工具。 2.-i ens2f0: 指定监听的网络接口。ens2f0 表示本地网卡&#xff09;&#xff0c;即计算机该指定网络接口捕…...

解决InnoDB: Failing assertion: !lock->recursive

背景&#xff1a; 在arm服务器里运行MySQL5.7.22版本 报错信息 &#xff1a; 2024-11-25T08:07:36.24182508:00 856 [Note] Multi-threaded slave statistics for channel : seconds elapsed 126; events assigned 53431297; worker queues filled over overrun level 0; …...

基于微信小程序的外卖点餐系统设计与实现ssm+论文源码调试讲解

4系统概要设计 4.1概述 本系统后台采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原…...

Helm Chart 实现 Kubernetes 应用的多环境部署与镜像更新

在现代软件开发中,通常需要将应用部署到多个环境(如开发环境、测试环境、生产环境),并且在不同环境中使用不同的配置和镜像版本。Helm Chart 提供了强大的模板化和参数化功能,可以轻松实现多环境部署和镜像更新。本文将详细介绍如何使用 Helm Chart 实现 Kubernetes 应用的…...

Firecrawl MCP Server 在 Cursor 中的完美配置:10个实用技巧提升开发效率

Firecrawl MCP Server 在 Cursor 中的完美配置&#xff1a;10个实用技巧提升开发效率 【免费下载链接】firecrawl-mcp-server Official Firecrawl MCP Server - Adds powerful web scraping to Cursor, Claude and any other LLM clients. 项目地址: https://gitcode.com/gh_…...

终极指南:ImagePicker资源解析机制如何高效处理图像资源

终极指南&#xff1a;ImagePicker资源解析机制如何高效处理图像资源 【免费下载链接】ImagePicker :camera: Reinventing the way ImagePicker works. 项目地址: https://gitcode.com/gh_mirrors/im/ImagePicker ImagePicker作为一款重新定义图片选择体验的工具&#xf…...

开发者跨界金融科技:机遇与技能图谱

一、金融科技浪潮下的测试新机遇1.1 行业爆发式增长催生人才缺口全球金融数智化进程加速&#xff0c;银行业持续加码科技投入。据公开数据显示&#xff0c;2024年仅国有六大行金融科技投入超1250亿元&#xff0c;同比增长约2%。业务快速迭代与用户体验升级需求&#xff0c;推动…...

66mt - 配电网分布式电源选址定容通用程序探索

66mt-配电网 分布式电源选址定容 通用程序 优化目标&#xff1a;1、总损耗或者总电压偏差最小 拓扑结构&#xff1a;任意拓扑结构的配电网系统(本算例为IEEE69节点系统) 优化对象&#xff1a;各分布式电源的接入位置&#xff0c;有功功率&#xff0c;无功功率(分布式电源数量可…...

英语节日庆祝口语

一、春节 (Chinese New Year / Spring Festival) 1. 春节祝福 中文英文春节快乐&#xff01;Happy Chinese New Year! / Happy Spring Festival!新年快乐&#xff01;Happy New Year!恭喜发财&#xff01;Wishing you prosperity! / Gong Xi Fa Cai!万事如意&#xff01;May …...

FlowScope:一款注重隐私的SQL数据血缘分析工具

最近团队接手了一个新的数据仓库项目&#xff0c;这个项目已经开发了很多年&#xff0c;包含了几百个表和几万行 ETL 存储过程代码。 目前我们经常面临的问题包括&#xff1a; 这个字段从哪里来&#xff1f;这张表被哪些存储过程用到了&#xff1f;修改这个字段会影响哪些 ET…...

亚马逊 API 签名认证机制详解

在调用亚马逊开放平台、亚马逊云服务&#xff08;AWS&#xff09;各类 API 时&#xff0c;签名认证是请求合法的核心门槛&#xff0c;目前主流采用 Signature Version 4&#xff08;SigV4&#xff09; 签名机制。它通过对请求内容与密钥做加密计算&#xff0c;实现身份校验、防…...

如何快速上手BepInEx:3个高效秘诀解锁Unity游戏插件开发

如何快速上手BepInEx&#xff1a;3个高效秘诀解锁Unity游戏插件开发 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 想象一下&#xff0c;你心爱的Unity游戏缺少某个功能&#xff…...

保姆级教程:Nanbeige 4.1-3B Streamlit WebUI的MySQL数据持久化配置

保姆级教程&#xff1a;Nanbeige 4.1-3B Streamlit WebUI的MySQL数据持久化配置 你是不是也遇到过这样的烦恼&#xff1f;用Streamlit给Nanbeige大模型搭了个漂亮的对话界面&#xff0c;每次聊得正开心&#xff0c;结果一刷新页面或者重启应用&#xff0c;之前的对话记录全没了…...

不止于模拟器:在Windows10上用VS2019+QEMU调试EDK2 UEFI应用的完整流程

从零构建UEFI开发环境&#xff1a;VS2019与QEMU深度整合实战指南 在当今固件开发领域&#xff0c;UEFI已逐步取代传统BIOS成为主流标准。对于开发者而言&#xff0c;搭建一个高效的UEFI开发环境是进行底层系统开发的第一步。本文将带你深入探索如何在Windows10平台上&#xff0…...