当我们需要在前端应用中与后端应用进行通信时,常常需要用到时间戳。因为各种编程语言对时间的处理方式不同,所以在不同编程语言之间进行通信时需要进行一些数据格式的转换。下面我会提供一些将 JS 时间戳转换成 C# 时间戳的方法和示例。
JS 时间戳转 C# 时间戳格式
JS 中获取时间戳的方式很简单,可以使用 Date.now()
或 new Date().getTime()
。这两个方法返回的都是毫秒级别的时间戳,如 1568204499816
。
在 C# 中,时间戳格式默认是从 1970 年 1 月 1 日 00:00:00(格林尼治标准时间)开始的秒数。因此,我们需要先将 JS 中的毫秒级别时间戳转换成秒级别的时间戳,再加上一个偏移量(Ticks),就可以得到 C# 中的时间戳了。
// 将 JS 时间戳转换成 C# 时间戳格式
public static long ConvertJsTimestampToCSharp(long timestamp)
{
// 首先将毫秒级别时间戳转换成秒级别时间戳
long result = timestamp / 1000;
// 计算偏移量,C# 时间戳是从 1970 年 1 月 1 日 00:00:00 开始的秒数
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
long ticks = (DateTime.UtcNow - origin).Ticks;
// 加上偏移量
result += ticks / TimeSpan.TicksPerSecond;
return result;
}
C# 时间戳格式转 JS 时间戳
同样,我们也可以将 C# 中的时间戳格式转换成 JS 中的时间戳格式。在 C# 中使用 DateTime.Ticks
获取当前时间的纳秒数,然后将其转换成秒级别的时间戳,最后再乘以 1000,得到毫秒级别的时间戳。
// 将 C# 时间戳格式转换成 JS 时间戳
public static long ConvertCSharpTimestampToJs(long timestamp)
{
// 计算偏移量,C# 时间戳是从 1970 年 1 月 1 日 00:00:00 开始的秒数
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
long ticks = (DateTime.UtcNow - origin).Ticks;
// 计算与当前时间的偏移量
long result = timestamp - ticks / TimeSpan.TicksPerSecond;
// 将秒级别的时间戳转换成毫秒级别的时间戳
result *= 1000;
return result;
}
下面是一个示例:我们有一个后台 API,返回当前时间的毫秒级别时间戳,我们需要在前端应用中将其转换成本地时间。
// 后台 API 返回的毫秒级别时间戳
var apiTimestamp = 1568204499816;
// 将毫秒级别的时间戳转换成 C# 时间戳格式
var csharpTimestamp = apiTimestamp / 1000 + Math.floor(62135596800000 / 1000)
// 将 C# 时间戳格式转换成 JS 时间戳格式
var localTimestamp = csharpTimestamp - (new Date().getTimezoneOffset() * 60) - (new Date(1970, 0, 1).getTime() / 1000);
// 转换本地时间
var localDate = new Date(localTimestamp * 1000);
// 输出本地时间
console.log(localDate.toLocaleString());
这个示例中,我们首先将后台 API 返回的毫秒级别时间戳转换成 C# 时间戳格式,然后在前端应用中将 C# 时间戳格式转换成 JS 时间戳格式,并使用 new Date()
将其转换成本地时间,最后输出日期时间字符串。
希望这些示例能够帮助到你。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js与C#进行时间戳转换 - Python技术站