C#:实现格式良好的时间字符串的最佳方法?

2024-01-16

我写这个问题是因为我正在寻求最好的方法来做到这一点。我的程序中有很多这样的内容,我想创建一种方法将包含计时器秒数的 Int32 转换为格式良好的字符串。

例如,如果我的计时器 int 为 at,可以说一个随机数,例如 16429 这将是:

4 hours, 32 minutes and 9 seconds

如果是 600,则为:

10 minutes

如果是60的话那就是

1 minute

如果是172801,那就是

2 days and 1 second

如果是32的话就是

32 seconds

我希望每个单词末尾的“s”,如“分钟”、“秒”和“日”,仅在不等于1时才添加S,因此实际上不需要正确发音。我也只想要天和小时以及其他需要添加的内容,因此如果计时器低于 1 天(以秒为单位),它只显示小时、分钟和秒,或者需要的内容。

实现这样的目标的最佳方法是什么?我在下面有这个函数,但它非常混乱,只能达到分钟和秒,而不是小时或天:

public static string GetConvertedTime(int timer)
{
    int Minutes = timer / 60;
    int Seconds = timer - Minutes * 60;

    if (timer < 60)
    {
        string secs = (Seconds != 1) ? "s" : "";
        return "" + timer + " second" + secs;
    }

    else
    {
        if (Seconds < 1)
        {
            string mins = (Minutes != 1) ? "s" : "";
            return "" + Minutes + " minute" + mins;
        }
        else
        {
            string mins = (Minutes != 1) ? "s" : "";
            string secs = (Seconds != 1) ? "s" : "";
            return "" + Minutes + " minute" + mins + " and " + Seconds + " second" + secs;
        }
    }
}

做到这一点的最佳方法到底是什么?


“最好的方法”是非常主观的。 DRY 通常是最好的,考虑到本地化和非常规复数形式通常是最好的,保持简短和活泼通常是最好的:

public static string FriendlyDuration(int seconds) {
    int[] divisors = { 60 * 60 * 24, 60 * 60, 60 , 1};
    string[] language = { ", ", " and ", "days", "day", "hours", "hour", "minutes", "minute", "seconds", "second"};
    var parts = new List<string>();
    for (int part = 0; part < divisors.Length; ++part) {
        int count = seconds / divisors[part];
        if (count == 0) continue;
        string unit = language[part*2 + (count == 1 ? 3 : 2)];
        parts.Add(string.Format("{0} {1}", count, unit));
        seconds -= count * divisors[part];
    }
    var result = string.Join(language[0], parts.ToArray());
    if (parts.Count > 1) {
        var ix = result.LastIndexOf(language[0]);
        result = result.Substring(0, ix) + language[1] + result.Substring(ix + language[0].Length);
    }
    return result;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#:实现格式良好的时间字符串的最佳方法? 的相关文章

  • Boost MPI 在监听列表时不会释放资源?

    这是一个后续问题如何释放 boost mpi request https stackoverflow com questions 44078901 how do i free a boostmpirequest 我在监听列表而不是单个项目时
  • C# 异步任务比同步慢

    你知道为什么同步斐波那契方法比异步 等待更快并且比异步任务更快吗 我在每个项目方法上都使用了异步 所以主要是这是一个非常糟糕的方法 Code static int FibonacciSync int number if number 0 r
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • Winform DatagridView 数字列排序

    我只使用一个简单的 DataGridView 来保存一堆数据 有趣的是 我在特定列中有小数 但是当按小数列排序时 它的排序是错误的 例如 起始顺序可能是 0 56 3 45 500 89 20078 90 1 56 100 29 2 39
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • C# 中的抽象类和接口类有什么不同?

    C 中的抽象类和接口类有什么不同 An 接口不是类 它只是一个contract定义了public一个类的成员must实施 抽象类只是一个类 您从中可以cannot创建一个实例 通常您会使用它来定义一个基类 该基类定义了一些virtual方法
  • std::make_pair 与浮点数组(float2,无符号整数)

    我有一个用 float2 unsigned int 对模板化的向量 例如 std vector
  • 您认为 ASP.NET MVC 会与 ASP.NET Webforms 竞争吗?

    您认为 ASP NET MVC 会在 Microsoft Web 开发市场中占据重要份额吗 还是会占市场的 10 15 哦是的 它将让 Web 表单脱颖而出 我们已经看到了真正的 MVC 框架在 Java 世界中的价值 在 MS 世界中 这
  • 模板与非模板类,跨编译器的不同行为

    我在一些应用程序中使用编译时计数器 它确实很有用 昨天我想用 gcc 编译一个程序 我之前使用的是 msvc 并且计数器的行为在模板类中发生了变化 它在模板类中不再工作 过于简化的代码 Maximum value the counter c
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 意外的 const 引用行为

    include
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • C - 获取外部IP地址

    我需要通过 C C 调用获取我的公共 IP 地址 我知道作为替代方案 我可以从 http whatismyip akamai com 等外部链接获取 我写了一个示例来获取外部IP地址 但我的程序没有返回外部 IP 地址 我正在获取内部 IP
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac

随机推荐

  • DBus与其他进程间通信方式的区别

    当我研究Linux进程间通信时 我知道有一些方法 管道 消息队列 套接字 信号 共享内存 信号量 并且没有名为Dbus的方法 但是今天 当我研究 Dbus 时 我读到 D Bus 是一个进程间通信 IPC 系统 请参阅 该链接 https
  • React 中的 msal.js - Azure 身份验证

    我收到错误 但 azure 中的所有访问都正常 也许我的端点是错误的 你有什么想法吗 错误 APP TEST 需要访问组织中只有管理员才能授予的资源的权限 请先请求管理员授予此应用程序的权限 然后才能使用它 我用这个 example 租户I
  • 如何跟踪SQL Server中记录的变化?

    我有下表 其中包含所有学生的跟踪记录 ID Department Date 001 English Feb 3 2017 001 English Feb 4 2017 001 Science Mar 1 2017 001 Science A
  • 程序仅在调试器之外的发布模式下崩溃

    我有相当庞大的程序 gt 10k 行 C 代码 从 Visual Studio 中启动时 它可以在调试模式或发布模式下完美运行 但从命令行手动启动时 发布模式二进制文件通常会崩溃 并不总是 带删除的行导致崩溃 bool Save const
  • 基于时间的通知架构

    我正在设计一个通知服务 服务器 我可以有两种通知 一种是立即发送 另一种是在将来的某个时间发送 是否有一个框架来处理未来的通知 我知道我可以编写后台工作人员 例如 他们可以对数据库进行采样以查找需要发送的通知 但我确信数百万人已经尝试解决这
  • 构建在 codeigniter 之上的 PHP 应用程序可以同时连接到 MySQL 和 mongoDB 数据库吗?

    我有一个内置于 codeigniter 并托管的 Web 应用程序云控 http www cloudcontrol com 我使用普通的 MySQL 数据库来进行所有数据持久化 现在除了 MySQL 数据库之外 我还想使用 mongodb
  • iPhone/iPad 触发意外的调整大小事件

    我正在开发我的网站的移动版本 我尽可能多地使用媒体查询和 CSS 但我也使用一些 javascript 例如 将导航转换为较小设备上的折叠 展开列表以节省空间 为了处理所有这些 我尝试使用 window resize 事件 这使得桌面浏览器
  • 如何测试用户输入的字符串是否在列表中?

    我是 Python 新手 我正在尝试制作一个脚本 让用户选择打开 Windows 命令提示符等程序 由于 Windows 命令提示符也是使用 cmd 打开的 因此我希望用户能够同时键入两者并获得相同的结果 我知道我可以将它放在多个 elif
  • 关键点匹配只能工作两次......? (java opencv)

    我有一个非常奇怪的问题 我正在使用此代码来检测另一个代码中的图像 java opencv 更新的代码 public void startRecognition load images I want to find img object in
  • 将 nginx conf 挂载为 docker 卷会导致系统错误 boot2docker

    我正在尝试在 docker 容器中运行 nginx 同时安装配置和静态 html 文件以供其使用 据我所知 非常简单的东西 但我不断收到有关该目录不是目录的错误 我使用最新版本的 Boot2Docker 在 Mac 上运行此示例 我有以下文
  • 如何更改我的减速器中的状态,尝试将属性设置为 true/false

    我的减速器是分开的 其中一个我的初始状态和减速器如下所示 import Constants from constants const initialState fetching true const boards state initial
  • 错误:scalac:“jvm-1.9”不是“-target”的有效选择

    使用 Gradle 创建了一个新的干净的 Scala 项目 这是唯一的依赖项 compile org scala lang scala library 2 12 4 在命令行上构建时 gradlew build工作得很好 然而 当使用 In
  • 在 apache 服务器上使用 PHP 将 ppt/pptx 转换为 JPG/PNG

    有人知道在 apache 服务器上使用 PHP 将 ppt pptx 幻灯片转换为服务器上的图像的方法吗 据我了解 一种方法是在服务器上安装microsoft powerpoint 或者可能是openoffice 以便将powerpoint
  • Android 动画 XML 问题

    我正在尝试使用 Android 的动画框架让我的 ImageView 以菱形图案移动 这是我的animation xml
  • 如何在鼠标悬停时在 div 元素周围创建边框

    我想在鼠标悬停在元素上方时在元素周围创建边框 我正在尝试使用 body mouseover function e var element document elementFromPoint e clientX e clientY var t
  • 如何通过拖动 Widget 的角来调整 Widget 上的 QTableWidget 大小

    我想调整大小QTableWidget通过拖动右下角 如下面的屏幕截图所示 这个怎么做 这是我的代码 code from PySide QtGui import QApplication QWidget QTableWidget week m
  • 良好的 Java 属性文件编辑器

    我从事一个开源 Java 项目 我们有很多包含可本地化消息资源的资源属性文件 这些文件由志愿者翻译成 20 多种语言 而我是一名主要编辑代码的开发人员 在 Java 中 不同语言环境的资源文件通过命名约定分组在一起 例如 如果默认 通常是英
  • Clickhouse数据导入

    我在Clickhouse中创建了一个表 CREATE TABLE stock plant Int32 code Int32 service level Float32 qty Int32 ENGINE Log 有一个数据文件 head n
  • 更新不在 Google Play 上的内部 Android 应用程序?

    我正在开发一个内部应用程序 但它不会出现在 Google Play 上 我该如何更新此应用程序 非常感谢大家 向人们发送新的 apk 或者让它检测何时有新版本 并告诉他们单击链接进行下载
  • C#:实现格式良好的时间字符串的最佳方法?

    我写这个问题是因为我正在寻求最好的方法来做到这一点 我的程序中有很多这样的内容 我想创建一种方法将包含计时器秒数的 Int32 转换为格式良好的字符串 例如 如果我的计时器 int 为 at 可以说一个随机数 例如 16429 这将是 4