将自定义方法与 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;       
}
}

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

此方法可以完全替换为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实际上将输入转换为毫秒,然后在不使用浮点数的情况下进行滴答,因此您可以保证添加实际输入的时间。也就是说,我找不到您的方法因此而中断的情况。

你可以像这样简化你的方法:

public static void Main()
{
var GetDate = new DateTime(2000, 01, 01, 00, 00, 00, 000);
// Using The regular way 
var resukt = GetDate.AddDays(1.125);
// using my method 
var result = GetDate.Add(1, 3, 00, 0, 0);
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 class DatimeExtensions
{
public static DateTime Add(this DateTime date, int day, int hour, int minute, int second, int millisecond) =>
date.AddDays(day).AddHours(hour).AddMinutes(minute).AddSeconds(second).AddMilliseconds(millisecond);
}

让我知道它是否对您有帮助。

最新更新