【问题标题】:Very flexible string format for TimeSpanTimeSpan 非常灵活的字符串格式
【发布时间】:2020-10-08 11:04:59
【问题描述】:

我想为 TimeSpan 对象实现最灵活的字符串格式。 假设你有这个代码:

string format = ".................";
TimeSpan ts = TimeSpan.FromSeconds(7200);
Debug.WriteLine(ts.ToString(format));

我想指定一个包含字符串格式的参数(在我的控制台应用程序的 app.config 中?)以切换不同的输出格式,而无需接触 C# 代码。例如: 7200sec(仅输出总秒数) 2h 00min 00sec(以友好的方式输出TimeSpan) 120 分钟(仅输出总分钟数) 等等。

我不想针对每种情况调整我的代码。

【问题讨论】:

  • 你的问题是? documentation on what's possible with TimeSpan formats 非常简单。
  • 您不能使用格式字符串来执行此操作。您是否正在寻找像 "humanizer" 这样的东西,它找出“最易读”的格式来显示内容?
  • TimeSpan.ToString() 使用当前区域性的 DateTimeFormatInfo。这可能是使用环境时间跨度格式属性有意义的唯一情况。即使在同一个表单上,不同的字段也需要不同的格式,例如以秒为单位的持续时间或一天中的时间。可以创建自定义 CultureInfo,但这会影响 每个 DateTime 或 Timespan 序列化

标签: c# .net timespan


【解决方案1】:

TimeSpan.ToStringstring.format 的组合应该很有用。

string format = "{2}h {0:%mm}min {0:%ss}sec";
string format2 = "{4}min";
TimeSpan ts = TimeSpan.FromSeconds(7200);
Console.WriteLine(string.Format(format, ts, ts.TotalDays, ts.TotalHours, ts.TotalMinutes, ts.TotalSeconds));
Console.WriteLine(string.Format(format2, ts, ts.TotalDays, ts.TotalHours, ts.TotalMinutes, ts.TotalSeconds));

【讨论】:

  • 您的代码如何确定(在运行时)使用哪种格式字符串?
  • 您提出了两种不同的格式字符串。他们似乎想要处理“2 秒”和“10 年 5 个月 2 天 1 分钟”之间的所有事情。为此,您需要多少种不同的格式字符串,以及代码如何确定使用哪一种?
  • 我了解 Igor 想在配置文件中定义格式字符串。如果他更改此字符串,他不想更改代码。如果我误解了,你当然是对的。
  • 是的,它们的“配置文件中的格式字符串”正是无法正常工作的部分。没有一个格式字符串可以完成所有这些操作。他们在编译时不知道 7200 的值,因此他们需要在运行时确定使用哪种格式字符串。你的回答并没有解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多