如何将JavaScript音频播放器时间戳转换为C# TimeSpan?
两种时间格式规范与转换实现
一、两种格式的规范说明
1. C# TimeSpan字符串格式
- 格式规则:
hh:mm:ss.fffffff(小时:分钟:秒.7位小数) - 细节:
- 小时部分支持超过24的数值(因为TimeSpan可表示跨天的时间间隔)
- 7位小数对应.NET TimeSpan的100纳秒精度刻度:每一位小数代表100纳秒,比如
.0840000就是840毫秒(8400000 × 100纳秒 = 840毫秒) - 这是.NET默认的TimeSpan序列化/反序列化格式,属于ISO 8601时间间隔规范的兼容简化格式
2. JavaScript音频播放器返回的数值格式
- 格式规则:一个浮点数,代表时间间隔的总秒数
- 细节:
- 整数部分是总秒数,小数部分包含毫秒及更高精度(比如
226.539319即226秒 + 539.319毫秒) - 精度通常为微秒级(6位小数),具体取决于音频播放器API的实现
- 本质是将时间间隔统一转换为以秒为单位的十进制数值,便于直接计算
- 整数部分是总秒数,小数部分包含毫秒及更高精度(比如
二、双向转换实现
1. JavaScript:总秒数转C#风格TimeSpan字符串
function secondsToTimeSpanString(seconds) { const totalSeconds = Math.abs(seconds); const hours = Math.floor(totalSeconds / 3600); const remainingAfterHours = totalSeconds % 3600; const minutes = Math.floor(remainingAfterHours / 60); const remainingSeconds = remainingAfterHours % 60; // 拆分秒的整数与小数部分,补全至7位小数 const secInt = Math.floor(remainingSeconds); const secDec = (remainingSeconds - secInt).toFixed(7).slice(2); // 格式化补零(小时允许超过两位,不强制补零) const formattedHours = hours.toString().padStart(2, '0'); const formattedMinutes = minutes.toString().padStart(2, '0'); const formattedSecInt = secInt.toString().padStart(2, '0'); const result = `${formattedHours}:${formattedMinutes}:${formattedSecInt}.${secDec}`; return seconds < 0 ? `-${result}` : result; } // 示例调用 console.log(secondsToTimeSpanString(226.539319)); // 输出 "00:03:46.5393190" console.log(secondsToTimeSpanString(5.084)); // 输出 "00:00:05.0840000"
2. C#:TimeSpan字符串转总秒数(浮点数)
using System; public class TimeConverter { public static double TimeSpanStringToTotalSeconds(string timeSpanStr) { if (TimeSpan.TryParse(timeSpanStr, out var span)) { return span.TotalSeconds; } throw new FormatException("无效的TimeSpan字符串格式"); } // 示例调用 public static void Main() { Console.WriteLine(TimeSpanStringToTotalSeconds("00:00:05.0840000")); // 输出 5.084 Console.WriteLine(TimeSpanStringToTotalSeconds("00:03:46.5393190")); // 输出 226.539319 } }
3. C#:总秒数转TimeSpan字符串
public static string TotalSecondsToTimeSpanString(double totalSeconds) { var span = TimeSpan.FromSeconds(totalSeconds); return span.ToString(@"hh\:mm\:ss\.fffffff"); } // 示例调用 Console.WriteLine(TotalSecondsToTimeSpanString(5.084)); // 输出 "00:00:05.0840000"
内容的提问来源于stack exchange,提问作者sylargaf
相关产品推荐
相关产品推荐

