c# - 如何在 C# 中以 0 到 1 十进制格式转换 DateTime.Now

标签 c# datetime timezone format decimal

我想将当前时间转换为代表一天的一小部分的小数。例如,如果一天从 0 开始,那么中午 12:00 应该是 0.5。

我需要将该值发送到 API,并且它需要采用该格式。即

"LAST_PRINT_TIME":0.22020833"

最佳答案

根据您对结果的精度要求,这可能会帮助您:

DateTime now = DateTime.Now;
double dayFraction = (now.Hour + now.Minute / 60d) / 24d;

now.Minute/60d 计算当前小时的分数(所以如果时间是 XX:15 PM,这将给出 0.25)。然后将其添加到当前小时。然后将该值除以 24 以获得最终结果。

例如,下午 3:45 将如下所示: (15 + 45/60)/24) => (15 + 0.75)/24 => 15.75/24 => 0.65625

因此,下午 3:45,即一天中的 15.75 小时,将是一天中的 0.65625(或 65.625%)。


或者,正如评论中提到的@madreflection,您也可以使用.ToOADate()。在这种情况下,您可以执行以下操作:

DateTime now = DateTime.Now;
double dayFraction = now.ToOADate() - now.Date.ToOADate();

关于c# - 如何在 C# 中以 0 到 1 十进制格式转换 DateTime.Now,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58550025/

相关文章:

c# - 从 C# 中 0 和 1 之间的随机字节数组中获取随机 double (浮点)值?

c# - 出列前读取 Queue<T> 中的项目

c# - 如何检测点击的确切位置?

c# - 如何在 C# 中干净地设计并行继承结构?

datetime - F#,小类型推断/注释错误

grails - Grails-在 Controller 中将服务器(UTC日期)转换为用户日期

python - TZ 数据库和多个美国时区

java - 打印 GMT+00 :00 in DateTimeFormatter

java - Android 无法解析日期 : "2017-12-01 00:00:00+01"

sql-server - 从 DateTime sql server 2005 中删除时间