c# - 使用带有 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
实际上将输入转换为毫秒,然后在不使用浮点数的情况下进行滴答,因此可以保证添加实际输入的时间。也就是说,我找不到您的方法因此而中断的情况。
推荐阅读
- python - 从 Python 中的嵌套 for 循环中绘制子图
- javascript - Webpack 和 svg-inline-loader 不起作用
- git - Git pull vs fetch - 新获取的分支没有区别?
- javascript - 意外的标记 '。' 尽管我有 95% 的把握,但我想我会放一个“。”。这里
- mysql - 使用 MySQL 限定值时我犯了错误吗?我已经运行了同一个查询的多个版本,但每个版本都不会输出任何内容
- r - 如何绘制彼此相邻的图表?
- css - 重叠的网格元素:第二个 div 无法加载
- c# - 如何确保 C# 应用程序从睡眠中醒来后会响应(Windows 10)?
- mongodb - 如何(从客户端的角度)获取使用(和免费)到 MongoDB 的连接数?
- python-3.x - excel中的python与xlwings