使用带有 DateTime.AddDays 参数的自定义方法
Used Custom Method with DateTime.AddDays Parameter
在 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
也更安全,因为您不会将一系列 floating point numbers together. This is because TimeSpan
actually converts 输入添加到毫秒,然后在不使用浮点数的情况下滴答作响,因此您可以保证添加你实际进入的时间。也就是说,我找不到您的方法因此而中断的情况。
你可以像这样简化你的方法:
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);
}
如果对你有帮助,请告诉我。
在 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
也更安全,因为您不会将一系列 floating point numbers together. This is because TimeSpan
actually converts 输入添加到毫秒,然后在不使用浮点数的情况下滴答作响,因此您可以保证添加你实际进入的时间。也就是说,我找不到您的方法因此而中断的情况。
你可以像这样简化你的方法:
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);
}
如果对你有帮助,请告诉我。