ToB企服应用市场:ToB评测及商务社交产业平台
标题:
开源 - Ideal库 - 常用时间转换扩展方法(二)
[打印本页]
作者:
守听
时间:
2024-11-9 05:03
标题:
开源 - Ideal库 - 常用时间转换扩展方法(二)
书接上回,我们继续来分享一些关于时间转换的常用扩展方法。
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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4