You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Streamer.bot(C#)实现Twitch命令:格式化显示事件时间差

自定义格式化TimeSpan为指定的时间差文本格式

直接使用TimeSpan的默认ToString()方法会得到固定格式的输出,要实现你需要的"x days, y hours, z minutes and a seconds"格式,需要手动拆分时间单位并处理单复数,最后拼接成目标字符串。

完整代码示例:

// 获取存储的上次事件时间和当前时间
DateTime lastDraw = CPH.GetGlobalVar<DateTime>("Hanged last", true);
DateTime now = DateTime.Now;
TimeSpan timeSince = now - lastDraw;

// 生成各时间单位的文本(处理单复数)
string daysText = $"{timeSince.Days} day{(timeSince.Days != 1 ? "s" : "")}";
string hoursText = $"{timeSince.Hours} hour{(timeSince.Hours != 1 ? "s" : "")}";
string minutesText = $"{timeSince.Minutes} minute{(timeSince.Minutes != 1 ? "s" : "")}";
string secondsText = $"{timeSince.Seconds} second{(timeSince.Seconds != 1 ? "s" : "")}";

// 组合所有部分,最后一个部分用"and"连接
List<string> timeParts = new List<string> { daysText, hoursText, minutesText, secondsText };
string formattedTime;

if (timeParts.Count == 1)
{
    formattedTime = timeParts[0];
}
else
{
    // 前n-1个部分用逗号分隔,最后一个用"and"连接
    formattedTime = string.Join(", ", timeParts.Take(timeParts.Count - 1)) + " and " + timeParts.Last();
}

// 最终输出文本,根据Streamer.bot规则发送到Twitch
string result = $"Time since last incident: {formattedTime}";
CPH.SendMessage(result);

可选优化:隐藏数值为0的部分

如果不希望显示数值为0的时间单位(比如0 days、0 hours),可以在组合前添加过滤逻辑:

timeParts = timeParts.Where(part => !part.StartsWith("0 ")).ToList();

这样当某单位数值为0时,该部分会被自动省略,比如时间差为7分59秒时,会输出"7 minutes and 59 seconds"。

内容的提问来源于stack exchange,提问作者StefanBraun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 16:10:54