使用可能存在舍入误差的模数计算时间
Calculating time using modulus with possible rounding errors
我从数据库中收到一个以秒为单位的时间值,我想将其计算为可读时间。这些是消息的总活跃时间,因此我不必考虑任何闰年。
我正在计算可能超过 24 小时的秒数,所以 hhh:mm:ss
。我用它来格式化来自 Live Charts 的图表上的标签。在我的代码中,我使用以下代码来计算它:
public Func<double, string> Formatter { get; set; }
Formatter = value => (((value - (value % 3600)) / 3600) + ":" + (((value % 3600) - (value % 60)) / 60) + ":" + (value % 60));
这工作正常,但有时会导致:
222:3:4
但我想要的是:
222:03:04
我找到了以下代码来制作 string.Format
但我不知道在使用 Func<>
时如何应用它:
static string Method1(int secs)
{
int hours = secs / 3600;
int mins = (secs % 3600) / 60;
secs = secs % 60;
return string.Format("{0:D2}:{1:D2}:{2:D2}", hours, mins, secs);
}
当我使用 public Func<double, string>
计算超过 24 小时的时间时,如何应用此 string.Format
。
您应该使用一种标准的 TimeSpan 格式化程序。可能 'g':
static string Method1(int secs)
{
var ts = new TimeSpan.FromSeconds(secs);
return ts.Format('g');
}
您可以在 public Func<double, string>
中使用 string.Format,只需应用值作为参数而不是单个字符串:
Formatter = value => string.Format("{0:D2}:{1:D2}:{2:D2}", (int)(value - (value % 3600)) / 3600, (int)((value % 3600) - (value % 60)) / 60, (int)value % 60);
或者,如前所述,最好使用内置函数。
我从数据库中收到一个以秒为单位的时间值,我想将其计算为可读时间。这些是消息的总活跃时间,因此我不必考虑任何闰年。
我正在计算可能超过 24 小时的秒数,所以 hhh:mm:ss
。我用它来格式化来自 Live Charts 的图表上的标签。在我的代码中,我使用以下代码来计算它:
public Func<double, string> Formatter { get; set; }
Formatter = value => (((value - (value % 3600)) / 3600) + ":" + (((value % 3600) - (value % 60)) / 60) + ":" + (value % 60));
这工作正常,但有时会导致:
222:3:4
但我想要的是:
222:03:04
我找到了以下代码来制作 string.Format
但我不知道在使用 Func<>
时如何应用它:
static string Method1(int secs)
{
int hours = secs / 3600;
int mins = (secs % 3600) / 60;
secs = secs % 60;
return string.Format("{0:D2}:{1:D2}:{2:D2}", hours, mins, secs);
}
当我使用 public Func<double, string>
计算超过 24 小时的时间时,如何应用此 string.Format
。
您应该使用一种标准的 TimeSpan 格式化程序。可能 'g':
static string Method1(int secs)
{
var ts = new TimeSpan.FromSeconds(secs);
return ts.Format('g');
}
您可以在 public Func<double, string>
中使用 string.Format,只需应用值作为参数而不是单个字符串:
Formatter = value => string.Format("{0:D2}:{1:D2}:{2:D2}", (int)(value - (value % 3600)) / 3600, (int)((value % 3600) - (value % 60)) / 60, (int)value % 60);
或者,如前所述,最好使用内置函数。