首页 > 编程语言 >C#计算日期间隔(小数)

C#计算日期间隔(小数)

时间:2023-04-27 15:12:49浏览次数:50  
标签:date1 todate date2 C# 间隔 DateTime fromdate var 小数

参考内容

TimeSpan 结构
在 DateTime、DateOnly、DateTimeOffset、TimeSpan、TimeOnly 和 TimeZoneInfo 之间进行选择
TimeZoneInfo 类
DateTimeOffset 结构
C#日期间隔:如何计算两个日期相差几年几个月?
C#中两个日期之间的间隔天数
Calculate Year, Month and Day between two Dates in C# [duplicate]
Calculate Years, Months, weeks and Days
Difference in months between two dates

代码

大概思路是掐成三段,分别计算在相加。天到小时,周、月、年到天

点击查看代码
        public static double DiffDay(this DateTime date1,DateTime date2)
        {
            var timespan = date1 - date2;
            var days = timespan.TotalDays;

            return Math.Abs(days);
        }

        public static double DiffWeek(this DateTime date1,DateTime date2)
        {
            if (date2 > date1)
            {
                var date3 = date1;
                date1 = date2;
                date2 = date3;
            }
            var fromdate = date2;
            var todate = date1;

            var weekDays = 7;

            var fromdateDayOfWeek = fromdate.DayOfWeek == DayOfWeek.Sunday ? weekDays : (double)fromdate.DayOfWeek;
            var todateDayOfWeek = todate.DayOfWeek == DayOfWeek.Sunday ? weekDays : (double)todate.DayOfWeek;

            var fromdateDayInWeekRate = (weekDays - fromdateDayOfWeek + 1) / weekDays;
            var todateDayInWeekRate = todateDayOfWeek / weekDays;

            var fromdate1 = fromdate.AddDays(weekDays - fromdateDayOfWeek + 1);
            var todate1 = todate.AddDays(-(todateDayOfWeek - 1));

            var diffWeek1 = (todate1 - fromdate1).Days / weekDays;

            var diffWeek = diffWeek1 + fromdateDayInWeekRate + todateDayInWeekRate;

            return diffWeek;
        }

        public static double DiffMonth(this DateTime date1,DateTime date2)
        {
            if (date2 > date1)
            {
                var date3 = date1;
                date1 = date2;
                date2 = date3;
            }
            var fromdate = date2;
            var todate = date1;


            var fromdateDayInMonth = (double)DateTime.DaysInMonth(fromdate.Year, fromdate.Month);
            var todateDayInMonth = (double)DateTime.DaysInMonth(todate.Year, todate.Month);

            var fromdateDayInMonthRate = (fromdateDayInMonth - fromdate.Day + 1) / fromdateDayInMonth;
            var todateDayInMonthRate = todate.Day / todateDayInMonth;

            var fromdate1 = fromdate.AddDays(fromdateDayInMonth - fromdate.Day + 1);
            var todate1 = todate.AddDays(-(todate.Day - 1));

            var diffMonth1 = (todate1.Year - fromdate1.Year) * 12 + todate1.Month - fromdate1.Month;

            var diffMonth = diffMonth1 + fromdateDayInMonthRate + todateDayInMonthRate;

            return diffMonth;
        }

        public static double DiffYear(this DateTime date1,DateTime date2)
        {
            if (date2 > date1)
            {
                var date3 = date1;
                date1 = date2;
                date2 = date3;
            }
            var fromdate = date2;
            var todate = date1;

            


            var fromdateDayInYear = (double)(new DateTime(fromdate.Year+1,1,1).AddDays(-1).DayOfYear);
            var todateDayInYear = (double)(new DateTime(todate.Year + 1, 1, 1).AddDays(-1).DayOfYear);

            var fromdateDayInYearRate = (fromdateDayInYear - fromdate.DayOfYear + 1) / fromdateDayInYear;
            var todateDayInYearRate = todate.DayOfYear / todateDayInYear;

            var fromdate1 = fromdate.AddDays(fromdateDayInYear - fromdate.DayOfYear + 1);
            var todate1 = todate.AddDays(-(todate.DayOfYear - 1));

            var diffYear1 = todate1.Year - fromdate1.Year;

            var diffYear = diffYear1 + fromdateDayInYearRate + todateDayInYearRate;

            return diffYear;
        }

标签:date1,todate,date2,C#,间隔,DateTime,fromdate,var,小数
From: https://www.cnblogs.com/hbdh/p/17358915.html

相关文章

  • 开心档之C++ 多态
    C++多态多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。下面的实例中,基类Shape被派生为两个类,如下所示:实例#include<iostream>usingnamespac......
  • 解决Kibana(OpenSearch)某些字段无法搜索问题
    背景最近在OpenSearch查看线上日志的时候,发现某个索引下有些字段无法直接在界面上筛选,搜索到也不高亮,非常的不方便,就像下面这样字段左侧两个筛选按钮禁用了无法点击,提示Unindexedfiledscannotbesearched右侧则有感叹号提示Nocachedmappingforthisfield.Refresh......
  • web: pdf_converter | DASCTF Apr.2023 X SU战队2023开局之战
    题目内容这道题是给源码的,是个thinkphp项目,可以直接看看控制器就一个pdf方法,用了dompdf库,然后把用户传入的content写到pdf中。既然这么明显,那就搜索dompdf漏洞知识点首先看到:https://ghostasky.github.io/2022/03/19/dompdf/首先看到这里说,如果传入自定义的c......
  • 小知识:使用oracle用户查看RAC集群资源状态
    正常情况按照标准配置的环境变量,只能grid用户查看RAC集群资源状态。crsctlstatres-t但是绝大部分操作其实都是oracle用户来操作,比如启停数据库,操作完成以后就需要检查下集群资源状态。看到好多DBA在现场操作时就是来回各种切换或开多个窗口。其实有两个简单的解决方法可以......
  • 开心档之C++ 引用
    C++引用引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。C++引用vs指针引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始......
  • PyTorch保存模型断点以及加载断点继续训练
       在训练神经网络时,用到的数据量可能很大,训练周期较长,如果半途中断了训练,下次从头训练就会很费时间,这时我们就想断点续训。一、神经网络模型的保存,基本两种方式:1.保存完整模型model, torch.save(model,save_path) 2.只保存模型的参数, torch.save(model.state_dict()......
  • CutMix&Mixup详解与代码实战
    摘要:本文将通过实践案例带大家掌握CutMix&Mixup。本文分享自华为云社区《CutMix&Mixup详解与代码实战》,作者:李长安。引言最近在回顾之前学到的知识,看到了数据增强部分,对于CutMix以及Mixup这两种数据增强方式发现理解不是很到位,所以这里写了一个项目再去好好看这两种数据增强方......
  • ElasticSearch中的Scroll机制
    Elasticsearch中的ScrollId机制是一种用于批量检索大量数据的机制。当我们需要批量获取大量数据时,直接使用搜索API可能会遇到一些性能问题。此时,ScrollId机制则能够帮助我们优化查询性能。该机制类似于一个游标,可以通过ScrollAPI来获取每个批次的结果。每个结果都包......
  • Docker创建运行Redis并挂载
    一、拉取redis镜像1、在线状态下拉取redis镜像dockerpullredis:版本号2、离线状态下获取redis镜像将在线状态拉取额redis镜像打成tar包dockersave-oredis.tarredis:版本号sudodockerload-iredis.tar二、运行redis容器dockerrun--restart=always--log-optmax......
  • 解决docker in docker http推送问题
    FROMdocker:18.09-dindENVDOCKER_HOST=unix:///var/run/docker.sockADD./main/bin/RUNmkdir-p/etc/docker&&echo-e'{"insecure-registries":["ip:5000"]}'>/etc/docker/daemon.jsonENTRYPOINT["/usr/local/......