首页 > 其他分享 >开源 - Ideal库 - 常用时间转换扩展方法(二)Qv

开源 - Ideal库 - 常用时间转换扩展方法(二)Qv

时间:2024-11-10 13:57:40浏览次数:3  
标签:DateOnly Qv TimeOnly 代码 Ideal DateTime 日期 时间 开源

合集 - Ideal库 - Common库(2)1.开源 - Ideal库 - 常用时间转换扩展方法(一)11-07:悠兔机场2.开源 - Ideal库 - 常用时间转换扩展方法(二)11-09收起
书接上回,我们继续来分享一些关于时间转换的常用扩展方法。

01、时间转日期时间 TimeOnly

该方式是把TimeOnly类型转为DateTime类型,其中日期部分使用系统当前日期,时间部分则使用TimeOnly,具体代码如下:

//时间转日期时间,默认使用当前日期+时间转为日期时间格式
public static DateTime ToDateTime(this TimeOnly timeOnly)
{
    return DateOnly.FromDateTime(DateTime.Now).ToDateTime(timeOnly);
}

02、日期+时间转为日期时间 TimeOnly

该方法是直接对TimeOnly时间进行扩展,取用其时间,然后补全指定DateOnly日期,最后转为DateTime,代码如下:

//日期+时间转为日期时间
public static DateTime ToDateTime(this TimeOnly timeOnly, DateOnly dateOnly)
{
    return dateOnly.ToDateTime(timeOnly);
}

03、日期时间中日期部分+时间转日期时间 TimeOnly

该方法是对TimeOnly时间进行扩展,取其时间,然后补全指定DateTime中的日期部分,最后再转为DateTime,代码如下:

//日期时间中日期部分+时间转日期时间格式
public static DateTime ToDateTime(this TimeOnly timeOnly, DateTime dateTime)
{
    return DateOnly.FromDateTime(dateTime).ToDateTime(timeOnly);
}

04、日期转日期时间 DateOnly

该方式是把DateOnly类型转为DateTime类型,其中日期部分使用DateOnly,时间部分则使用系统当前时间,具体代码如下:

//日期转日期时间,日期+默认使用当前时间转为日期时间格式
public static DateTime ToDateTime(this DateOnly dateOnly)
{
    return dateOnly.ToDateTime(TimeOnly.FromDateTime(DateTime.Now));
}

05、日期+日期时间中时间部分转日期时间 DateOnly

该方法是对DateOnly日期进行扩展,取其日期,然后补全指定DateTime中的时间部分,最后再转为DateTime,代码如下:

//日期+日期时间中时间部分转日期时间
public static DateTime ToDateTime(this DateOnly dateOnly, DateTime dateTime)
{
    return dateOnly.ToDateTime(TimeOnly.FromDateTime(dateTime));
}

06、日期时间中日期部分+时间转日期时间 DateTime

该方法是对DateTime日期时间进行扩展,取其日期部分,然后补全指定TimeOnly时间,最后再转为DateTime,代码如下:

//日期时间中日期部分+时间转日期时间
public static DateTime ToDateTime(this DateTime dateTime, TimeOnly timeOnly)
{
    return DateOnly.FromDateTime(dateTime).ToDateTime(timeOnly);
}

07、日期+日期时间中时间部分转为日期时间 DateTime

该方法是对DateTime日期时间进行扩展,取其时间部分,然后补全指定DateOnly日期,最后再转为DateTime,代码如下:

//日期+日期时间中时间部分转为日期时间
public static DateTime ToDateTime(this DateTime dateTime, DateOnly dateOnly)
{
    return dateOnly.ToDateTime(TimeOnly.FromDateTime(dateTime));
}

08、日期时间转日期 DateTime

该方法是对DateTime日期时间进行扩展,取其日期部分转为DateOnly,代码如下:

//日期时间转日期,保留日期时间中日期部分
public static DateOnly ToDateOnly(this DateTime dateTime)
{
    return DateOnly.FromDateTime(dateTime);
}

09、日期时间转时间 DateTime

该方法是对DateTime日期时间进行扩展,取其时间部分转为TimeOnly,代码如下:

//日期时间转时间,保留日期时间中时间部分
public static TimeOnly ToTimeOnly(this DateTime dateTime)
{
    return TimeOnly.FromDateTime(dateTime);
}

上面的这些扩展方法虽然大多都是简单调用原生方法,但是通过扩展方法方式提供出来后的确在编码上提升了一些效率,代码也会根据简洁。

10、代码结构设计与组织

代码结构的设计和组织是软件开发过程中重要的一环,它将直接影响代码的可读性、可维护性、扩展性、测试性和团队协作的效率。

到目前为止我们关于时间的扩展方法已经有接近30个方法了,后面还有很多,目前都是放在DateTimeExtension类下面,如下图:

到这里已经能感受到代码结构显得很混乱了,直观感觉就是可读性差,没有结构化必然会导致扩展困难。

可能会有人提出不同观点,这些不就是很多静态方法吗,只有排版整齐就行了,其实不然,我们可以借助一些小技巧把方法集合结构化的管理起来。

结构化的管理一种实现方式就行——分类。下面我们就对现有代码进行分类。

分类是一门技术活,如何选择分类标准很关键,比如我们这里可以根据入参类型分为针对long类型转换、针对DateTime类型转换、针对string类型转换;也可以根据功能分类比如时间和时间戳互相转换是一类,时间和字符串互相转换是一类,DateTime与DateOnly和TimeOnly互相转换是一类等等分类方式。

1、分大类

我的思路是这样的,首先通过部分类partial把DateTimeExtension根据入参类型分成几个大类。

代码整理后效果如下:

2、分小类

分完大类后发现long类型中方法还是很大,因此我们继续对其进行分类,我们根据功能不同分为两类:转为本地日期时间和转为UTC日期时间。我们可以使用代码折叠的预处理指令#region和#endregion来处理处理小分类。

代码整理以后效果如下:

从一开始一堆方法到现在结构层次已经非常清晰了,阅读起来也非常方便,后期维护扩展就可以很容易的快速找到相应地方处理。

11、单元测试

作为一个开源代码,我们首要任务应该保证代码正确性,因此单元测试是必不可少的。单元测试不但可以保证我们代码的正确性,还可以促使我们代码写的跟健壮。

单元测试我们以同样的分类方式进行代码组织,代码大致如下:

因为具体的测试用例都比较简单,这里就不拿出来讲解了。

测试用例编写的越完善,我们代码就越可靠,因此我们在编写单元测试时候,要尽可能覆盖所有逻辑,要尽可能覆盖到一些特例情况,我们想的越多代码质量才能越高。

12、文档

作为一个开源代码,还需要一个好的文档,这样别人才能轻松使用,目前文档还是缺失的,后续我将陆续添加上。

当代码结构设计与组织、单元测试、文档这三部分都做好了,我感觉这个开源代码就达到开源给别人的最低要求了。后面的开源代码我都将围绕这三部分展开,希望可以给大家分享一些高质量的开源代码。

稍晚些时候我会把库上传至Nuget上,大家可以搜索Ideal.Core.Common直接使用。

:测试方法代码以及示例源码都已经上传至代码库,有兴趣的可以看看。https://gitee.com/hugogoos/Ideal

标签:DateOnly,Qv,TimeOnly,代码,Ideal,DateTime,日期,时间,开源
From: https://www.cnblogs.com/westworldss/p/18537893

相关文章

  • JAVA开源项目 基于Vue和SpringBoot洗衣店订单管理系统
    博主说明:本文项目编号T068,文末自助获取源码\color{red}{T068,文末自助获......
  • JAVA开源项目 基于Vue和SpringBoot教学资源库系统
    博主说明:本文项目编号T067,文末自助获取源码\color{red}{T067,文末自助获......
  • 从截图到代码:screenshot-to-code开源项目实践指南
    一、运行效果 项目地址:GitHub-abi/screenshot-to-code:Dropinascreenshotandconvertittocleancode(HTML/Tailwind/React/Vue)二、实践步骤1.将项目下载到本地2.获取Anthropic(Claude)密钥或者 OpenAIAPI(chatGPT)密钥(1)OpenAIAPI(chatGPT)密钥......
  • ONLYOFFICE 8.2深度测评:开源的办公套件
    本文一、OCR与PDF功能升级,实现文档管理智能化1.PDF编辑与OCR文本识别2.丰富的PDF标记和注释选项二、表格功能的深度增强,数据分析更高效1.新增数据透视表功能2.自动填充和智能建议三、实时协作功能升级,团队合作更加顺畅1.多人在线协作,实时编辑2.文档加密与权限管......
  • vue通过ollama接口调用开源模型
    先展示下最终效果: 第一步:先安装ollama,并配置对应的开源大模型。安装步骤可以查看上一篇博客:ollama搭建本地ai大模型并应用调用 第二步:需要注意两个配置,页面才可以调用1)OLLAMA_HOST="0.0.0.0:11434"2)若应用部署服务器后想调用,需要配置:OLLAMA_ORIGINS=* 第三步:js流式调......
  • 【让中国再次伟大】腾讯开源大语言模型Hunyuan-large,支持高达256K文本序列
    腾讯今日发布开源MOE大语言模型Hunyuan-large,总参数量达398B,激活参数量52B。公开测评结果显示,腾讯混元Large在CMMLU、MMLU、CEva1、MATH等多学科综合评测集以及中英文NLP任务、代码和数学等9大维度全面领先,超过Llama3.1、Mixtral等一流的开源大模型。随着人工智能技术的飞......
  • MudBlazor:基于Material Design风格开源且强大的Blazor组件库
    项目介绍MudBlazor是一个基于MaterialDesign风格开源、免费(MITLicense)、功能强大的Blazor组件框架,注重易用性和清晰的结构。它非常适合想要快速构建Web应用程序的.NET开发人员,无需费力地处理CSS和JavaScript。由于MudBlazor完全使用C#编写,因此你可以自由地调整、修复或扩......
  • 一款.NET开源的屏幕实时翻译工具
    前言今天大姚给大家推荐一款.NET开源的屏幕实时翻译工具:Translumo。工具介绍Translumo是一个.NET开源的高级屏幕翻译工具,能够实时检测和翻译选定区域内的文本(如字幕)。Translumo允许同时组合使用多个OCR引擎。它使用机器学习训练模型通过OCR对每个识别的结果进行评分,并选择......
  • 开源模型应用落地-glm模型小试-glm-4-9b-chat-tools使用(五)
    一、前言  GLM-4是智谱AI团队于2024年1月16日发布的基座大模型,旨在自动理解和规划用户的复杂指令,并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等,支持128K的上下文窗口,使其在长文本处理和精度召回方面表现优异,且在中文对齐能力上超过GPT-4。与之前的GLM系列......
  • Me-LLaMA——用于医疗领域的新型开源大规模语言模型
    摘要大规模语言模型的出现是提高病人护理质量和临床操作效率的一个重大突破。大规模语言模型拥有数百亿个参数,通过海量文本数据训练而成,能够生成类似人类的反应并执行复杂的任务。这在改进临床文档、提高诊断准确性和管理病人护理方面显示出巨大的潜力。然而,像ChatGPT和......