c# - 将时间四舍五入到最接近的小时

标签 c# variables time split rounding

好的,基本上我有一个程序可以重写文本文件并通过各种条件对其进行格式化,其中一个条件是我的原始文本文件中的日期和时间值需要从其当前位置删除并移至我创建了一个新列,这是用下面的代码完成的。我使用正则表达式查找日期和时间格式,然后将其从当前位置删除并将值存储在我以后可以使用的变量中...

if (line.Contains(date))
{
    string pattern = @"(\d{2}:\d{2}:\d{2}\s?\d{2}/\d{2}/\d{4})";
    string input = line;
    string replacement = "";
    Regex rgx = new Regex(pattern);
    date1 = rgx.Match(input).ToString();
    string result = rgx.Replace(input, replacement);
    line = result;
}

返回的这个新值同时获取时间和日期值,但仅作为一个字符串,因此我随后使用拆分(如下所示)将两个值分开,现在拆分 [0] 是我的时间变量(00/00/00 格式)——我现在需要将其四舍五入到最接近的小时。我真的不知道该怎么做,有什么想法吗?

string[] split = date1.Split(' ');                
writer.WriteLine(split[0] + "\t" + split[1] + "\t" + line);

最佳答案

将字符串中的日期放入 DateTime 结构中。参见例如 TryParseExact方法

然后您可以根据上一步的值的年/月/日/小时创建一个新的 DateTime 值,将分钟和秒部分设置为零(参见 here)

如果(第一个值的)分钟或秒部分不为零,则使用 .AddHours(1) 添加一小时,它返回一个新的 DateTime 值。

编辑
一些示例代码:

string inputdate = "2:56:30 8/7/2014";

DateTime dt;
System.Globalization.CultureInfo enUS = new System.Globalization.CultureInfo("en-US");

if (DateTime.TryParseExact(inputdate, "H:m:s d/M/yyyy", // hours:minutes:seconds day/month/year
    enUS, System.Globalization.DateTimeStyles.None, out dt))
{
  // 'dt' contains the parsed date: "8-7-2014 02:56:30"
  DateTime rounded = new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, 0, 0);
  if (dt.Minute > 0 || dt.Second > 0) // or just check dt.Minute >= 30 for regular rounding
    rounded = rounded.AddHours(1);

  // 'rounded' now contains the date rounded up: "8-7-2014 03:00:00"
}
else
{
  // not a correct date
}

关于c# - 将时间四舍五入到最接近的小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24632466/

相关文章:

c# - 导航 QueryString 与 PhoneApplicationService.Current.State

mysql - 如何使用 MySQL 将子查询结果存储在 session 变量中?

javascript - 如何防止 JavaScript 函数计算分配给字符串变量的参数?

MySQL 5.6 函数内数据类型 time 的计算返回错误值 - 但外部没问题

python - 每 x 秒调用一次函数 (Python)

c++ - 为什么循环中耗时与迭代次数不成正比

c# - 返回 MVC 中的倒数第二个 URL(返回应用了先前过滤条件的 View )?

c# - 使用 C# 的年份中的日期差异

c# - 通过路径设置JSON属性

Scala 方法中变量名不明确