- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
书接上回,我们继续来分享一些关于时间转换的常用扩展方法.
该方式是把TimeOnly类型转为DateTime类型,其中日期部分使用系统当前日期,时间部分则使用TimeOnly,具体代码如下:
//时间转日期时间,默认使用当前日期+时间转为日期时间格式
public static DateTime ToDateTime(this TimeOnly timeOnly)
{
return DateOnly.FromDateTime(DateTime.Now).ToDateTime(timeOnly);
}
该方法是直接对TimeOnly时间进行扩展,取用其时间,然后补全指定DateOnly日期,最后转为DateTime,代码如下:
//日期+时间转为日期时间
public static DateTime ToDateTime(this TimeOnly timeOnly, DateOnly dateOnly)
{
return dateOnly.ToDateTime(timeOnly);
}
该方法是对TimeOnly时间进行扩展,取其时间,然后补全指定DateTime中的日期部分,最后再转为DateTime,代码如下:
//日期时间中日期部分+时间转日期时间格式
public static DateTime ToDateTime(this TimeOnly timeOnly, DateTime dateTime)
{
return DateOnly.FromDateTime(dateTime).ToDateTime(timeOnly);
}
该方式是把DateOnly类型转为DateTime类型,其中日期部分使用DateOnly,时间部分则使用系统当前时间,具体代码如下:
//日期转日期时间,日期+默认使用当前时间转为日期时间格式
public static DateTime ToDateTime(this DateOnly dateOnly)
{
return dateOnly.ToDateTime(TimeOnly.FromDateTime(DateTime.Now));
}
该方法是对DateOnly日期进行扩展,取其日期,然后补全指定DateTime中的时间部分,最后再转为DateTime,代码如下:
//日期+日期时间中时间部分转日期时间
public static DateTime ToDateTime(this DateOnly dateOnly, DateTime dateTime)
{
return dateOnly.ToDateTime(TimeOnly.FromDateTime(dateTime));
}
该方法是对DateTime日期时间进行扩展,取其日期部分,然后补全指定TimeOnly时间,最后再转为DateTime,代码如下:
//日期时间中日期部分+时间转日期时间
public static DateTime ToDateTime(this DateTime dateTime, TimeOnly timeOnly)
{
return DateOnly.FromDateTime(dateTime).ToDateTime(timeOnly);
}
该方法是对DateTime日期时间进行扩展,取其时间部分,然后补全指定DateOnly日期,最后再转为DateTime,代码如下:
//日期+日期时间中时间部分转为日期时间
public static DateTime ToDateTime(this DateTime dateTime, DateOnly dateOnly)
{
return dateOnly.ToDateTime(TimeOnly.FromDateTime(dateTime));
}
该方法是对DateTime日期时间进行扩展,取其日期部分转为DateOnly,代码如下:
//日期时间转日期,保留日期时间中日期部分
public static DateOnly ToDateOnly(this DateTime dateTime)
{
return DateOnly.FromDateTime(dateTime);
}
该方法是对DateTime日期时间进行扩展,取其时间部分转为TimeOnly,代码如下:
//日期时间转时间,保留日期时间中时间部分
public static TimeOnly ToTimeOnly(this DateTime dateTime)
{
return TimeOnly.FromDateTime(dateTime);
}
上面的这些扩展方法虽然大多都是简单调用原生方法,但是通过扩展方法方式提供出来后的确在编码上提升了一些效率,代码也会根据简洁.
代码结构的设计和组织是软件开发过程中重要的一环,它将直接影响代码的可读性、可维护性、扩展性、测试性和团队协作的效率.
到目前为止我们关于时间的扩展方法已经有接近30个方法了,后面还有很多,目前都是放在DateTimeExtension类下面,如下图:
到这里已经能感受到代码结构显得很混乱了,直观感觉就是可读性差,没有结构化必然会导致扩展困难.
可能会有人提出不同观点,这些不就是很多静态方法吗,只有排版整齐就行了,其实不然,我们可以借助一些小技巧把方法集合结构化的管理起来.
结构化的管理一种实现方式就行——分类。下面我们就对现有代码进行分类.
分类是一门技术活,如何选择分类标准很关键,比如我们这里可以根据入参类型分为针对long类型转换、针对DateTime类型转换、针对string类型转换;也可以根据功能分类比如时间和时间戳互相转换是一类,时间和字符串互相转换是一类,DateTime与DateOnly和TimeOnly互相转换是一类等等分类方式.
我的思路是这样的,首先通过部分类partial把DateTimeExtension根据入参类型分成几个大类.
代码整理后效果如下:
分完大类后发现long类型中方法还是很大,因此我们继续对其进行分类,我们根据功能不同分为两类:转为本地日期时间和转为UTC日期时间。我们可以使用代码折叠的预处理指令#region和#endregion来处理处理小分类.
代码整理以后效果如下:
从一开始一堆方法到现在结构层次已经非常清晰了,阅读起来也非常方便,后期维护扩展就可以很容易的快速找到相应地方处理.
作为一个开源代码,我们首要任务应该保证代码正确性,因此单元测试是必不可少的。单元测试不但可以保证我们代码的正确性,还可以促使我们代码写的跟健壮.
单元测试我们以同样的分类方式进行代码组织,代码大致如下:
因为具体的测试用例都比较简单,这里就不拿出来讲解了.
测试用例编写的越完善,我们代码就越可靠,因此我们在编写单元测试时候,要尽可能覆盖所有逻辑,要尽可能覆盖到一些特例情况,我们想的越多代码质量才能越高.
作为一个开源代码,还需要一个好的文档,这样别人才能轻松使用,目前文档还是缺失的,后续我将陆续添加上.
当代码结构设计与组织、单元测试、文档这三部分都做好了,我感觉这个开源代码就达到开源给别人的最低要求了。后面的开源代码我都将围绕这三部分展开,希望可以给大家分享一些高质量的开源代码.
稍晚些时候我会把库上传至Nuget上,大家可以搜索Ideal.Core.Common直接使用.
注:测试方法代码以及示例源码都已经上传至代码库,有兴趣的可以看看。https://gitee.com/hugogoos/Ideal 。
最后此篇关于开源-Ideal库-常用时间转换扩展方法(二)的文章就讲到这里了,如果你想了解更多关于开源-Ideal库-常用时间转换扩展方法(二)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
去年(2023年)年底我初学flutter,看了一些文档和教程,想找个东西*练练手。 小时候看过一个关于历史名人儿时事迹的短片,有一集是讲*总理的,有一个细节我记得很清楚:幼年***经常要做一个游戏
今天给大家分享一个我做的小工具,可以自定义扩展右键菜单的功能来提高工作效率,效果图如下: image 如上图,右键菜单多了几个我自定义的菜单
书接上回,今天继续和大家享一些关于枚举操作相关的常用扩展方法。 今天主要分享通过枚举值转换成枚举、枚举名称以及枚举描述相关实现。 我们首先修改一下上一篇定义用来测试的正常枚举,新增一个枚举项,
今天和大家享一些关于枚举操作相关的常用扩展方法。 我们平时用的比较多的是正常枚举,同时还有加[Flags]特性的位标志枚举,因此以下所有扩展方法同时适用正常枚举以及位标志枚举。 我们首先定义两
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法。 01、获取当前日期所在月的第一个指定星期几 该方法和前面介绍的获取当前日期所在周的第一天(周一)核心思想是一样的,只是把求周一改成
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法。 01、获取当天的开始时间 当天的开始时间指00:00:00时刻,因此只需要获取DateTime的Date属性只获取时间即可,具体代
书接上回,我们继续来分享一些关于时间转换的常用扩展方法。 01、时间转日期时间 TimeOnly 该方式是把TimeOnly类型转为DateTime类型,其中日期部分使用系统当前日期,时间部分
从事软件开发这么多年,平时也积累了一些方便自己快速开发的帮助类,一直在想着以什么方式分享出来,因此有了这个系列文章,后面我将以《开源-Ideal库》系列文章分享一些我认为比较成熟、比较方便、比较好的代
任何人都可以建议我应该使用什么程序/方法? 我需要有一个像谷歌地图这样的 map ,我可以在其中显示 map 、添加标记多边形等。 但是我不能依赖这样的在线服务,因为客户担心这样的服务会消失,我们的系
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 11年前关闭。 Improve this qu
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
您知道 EDA(电子设计自动化)领域有哪些开源项目正在寻找 C++ 程序员吗? 最佳答案 如果您经常关注 gEDA 的邮件列表,您也许能够加入 gEDA。详情:http://www.gpleda.or
如果现有Hadoop群集上有10个数据节点,则可以在4个或6个数据节点上安装NiFi吗? NiFi的主要目的是每天将数据从RDBMS加载到高容量的HDFS。 数据节点将配置为具有100 GB的高RAM
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
Closed. This question is off-topic。它当前不接受答案。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
【Github源码】 《上一篇》 介绍了Xmtool工具库中的图形验证码类库,今天我们继续为大家介绍其中的扩展动态对象类库。 扩展动态对象是整个工具库中最重要的一个设计。
【Github源码】 《上一篇》 介绍了Xmtool工具库中的Web操作类库,今天我们继续为大家介绍其中的图形验证码类库。 图形验证码是为了抵御恶意攻击出现的一种设计;例如用
我是一名优秀的程序员,十分优秀!