首页 > 解决方案 > 使用带有 DateTime.AddDays 参数的自定义方法

问题描述

在 DateTime 的算术运算中,一种称为

DateTime.AddDays Method (Double) 

如果我们只想使用不带分数的天数(例如完整的天数,它将在带有整数的双参数中引用)或常见的天数小数部分(例如,它将引用双参数,其中 0.5 表示一半或 0.25 表示第八)

对我来说,我认为如果我要求提供双参数和一天的值(12 天 5 小时 30 分钟 54 秒 235 毫秒)

将其转换为分数可能会有些难度,并且可能会浪费时间

所以我决定构建一个自定义方法(在我的 C# 中级级别),根据参数的特定值为我的实例值提供双精度:

public static double TimeToFraction(int day, int hour, int minute, int second, int millisecond)
    {
        var hour_to_date    = TimeSpan.FromHours(hour).TotalDays;
        var min_to_day      = TimeSpan.FromMinutes(minute).TotalDays;
        var second_to_day   = TimeSpan.FromSeconds(second).TotalDays;
        var millisec_to_day = TimeSpan.FromMilliseconds(millisecond).TotalDays;

        return day+ hour_to_date + min_to_day + second_to_day + millisec_to_day;       
    }

并在以下代码及其工作中尝试

class Program
{
    public static void Main()
    {
        var GetDate = new DateTime(2000, 01, 01, 00, 00, 00, 000);

        // Set The value 
        var dd = Program.TimeToFraction(1, 3, 00, 0, 0);
        // Using The regular way 
        var resukt = GetDate.AddDays(1.125);
        // using my method 
        var result = GetDate.AddDays(dd);

        Console.WriteLine(resukt.ToString("yyyy'/'MM'/'dd HH:mm:ss.fffff"));
        Console.WriteLine(result.ToString("yyyy'/'MM'/'dd HH:mm:ss.fffff"));

       // outputs 
       //2000/01/02 03:00:00.00000
       //2000/01/02 03:00:00.00000


        Console.ReadLine();
    }

    public static double TimeToFraction(int day, int hour, int minute, int second, int millisecond)
    {
        var hour_to_date    = TimeSpan.FromHours(hour).TotalDays;
        var min_to_day      = TimeSpan.FromMinutes(minute).TotalDays;
        var second_to_day   = TimeSpan.FromSeconds(second).TotalDays;
        var millisec_to_day = TimeSpan.FromMilliseconds(millisecond).TotalDays;

        return day+ hour_to_date + min_to_day + second_to_day + millisec_to_day;       
    }
}

我只是想听听你们的意见,我所做的是否好?关于这个的任何想法..或该方法的代码改进..

标签: c#datetimetimespan

解决方案


此方法可以完全替换为TimeSpan. TimeSpan 可以这样使用:

var ts = new TimeSpan(days, hours, minutes, seconds, milliseconds);

要在您的示例中使用它:

var dd = new TimeSpan(1, 3, 00, 0, 0);
// using my method 
var result = GetDate.Add(dd);

使用TimeSpan也更安全,因为您没有将一系列浮点数相加。这是因为TimeSpan实际上输入转换为毫秒,然后在不使用浮点数的情况下进行滴答,因此可以保证添加实际输入的时间。也就是说,我找不到您的方法因此而中断的情况。


推荐阅读