首页 > 解决方案 > 使用百分比,我如何获得两个日期时间之间的时间?

问题描述

我认为描述这一点的最好方法是使用示例。范围在上午 4:00 到下午 4:00 之间。在 0% 时,我想4:00am回来。100%,我想4:00pm回来。50%,我想10:00am回来。

问题是,如何使用此签名获得此功能?

string GetTime(percentage, startTime, endTime)

标签: c#datetime

解决方案


假设两个 DateTimes 都在同一个时区,并且没有转换(DST 开始/结束,本地时间更改等):

public static void Main()
{
    var startTime = new DateTime(2019, 01, 01, 4, 0, 0);
    var endTime = new DateTime(2019, 01, 01, 16, 0 , 0);

    // prints 10:00 AM
    Console.WriteLine(GetTime(0.5, startTime, endTime));
}

private static string GetTime(double percentage, DateTime startTime, DateTime endTime)
{
    // get the difference between the dates
    // you could use TotalSeconds or a higher precision if needed
    var diff = (endTime - startTime).TotalMinutes;

    // multiply the result by the percentage
    // assuming a range of [0.0, 1.0]
    double minutes = diff * percentage;

    // add the minutes (or precision chosen) to the startTime
    var result = startTime.AddMinutes(minutes);

    // and get the result
    return result.ToShortTimeString();
}

您可以在这个小提琴中进行测试:https ://dotnetfiddle.net/g4gHLJ


推荐阅读