我有一个SQL服务器时间戳,我需要将其转换为自1970年以来以毫秒为单位的时间表示。我可以使用纯SQL执行此操作吗?如果没有,我将其提取到C#中的DateTime
变量中。是否有可能获得毫米级的代表?
谢谢,
的Teja。
答案 0 :(得分:116)
您可能正在尝试转换为类似UNIX的时间戳,这些时间戳采用UTC格式:
yourDateTime.ToUniversalTime().Subtract(
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
).TotalMilliseconds
这也避免了夏季问题,因为UTC没有这些问题。
答案 1 :(得分:60)
在C#中,你可以写
(long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds
答案 2 :(得分:20)
从.NET 4.6开始,您可以使用DateTimeOffset
对象获取unix毫秒。它有一个构造函数,它接受一个DateTime
对象,所以你可以传递你的对象,如下所示。
DateTime yourDateTime;
long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();
如其他答案中所述,请确保yourDateTime
指定了正确的Kind
,或使用.ToUniversalTime()
将其首先转换为UTC时间。
Here您可以详细了解DateTimeOffset
。
答案 3 :(得分:3)
SELECT CAST(DATEDIFF(S, '1970-01-01', SYSDATETIME()) AS BIGINT) * 1000
这并不能提供完全的精确度,但DATEDIFF(MS...
会导致溢出。如果秒数足够好,就应该这样做。
答案 4 :(得分:2)
此另一个解决方案是将隐藏日期时间改为unixtimestampmillis C#。
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static long GetCurrentUnixTimestampMillis()
{
DateTime localDateTime, univDateTime;
localDateTime = DateTime.Now;
univDateTime = localDateTime.ToUniversalTime();
return (long)(univDateTime - UnixEpoch).TotalMilliseconds;
}
答案 5 :(得分:1)
使用Andoma的答案,这就是我正在做的事情
您可以像这样创建一个Struct或类
struct Date
{
public static double GetTime(DateTime dateTime)
{
return dateTime.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
}
public static DateTime DateTimeParse(double milliseconds)
{
return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(milliseconds).ToLocalTime();
}
}
您可以在代码中使用此代码,如下所示
DateTime dateTime = DateTime.Now;
double total = Date.GetTime(dateTime);
dateTime = Date.DateTimeParse(total);
我希望这可以帮到你
答案 6 :(得分:1)
DemTimeExtensions 类中有ToUnixTime()
和ToUnixTimeMs()
方法
DateTime.UtcNow.ToUnixTimeMs()
答案 7 :(得分:0)
angular说date
parater:
格式化日期对象,毫秒(字符串或数字)的日期 或各种ISO 8601日期时间字符串格式(例如 yyyy-MM-ddTHH:mm:ss.sssZ及其较短的版本 yyyy-MM-ddTHH:mmZ,yyyy-MM-dd或yyyyMMddTHHmmssZ)。如果没有时区 在字符串输入中指定,时间被认为是在 当地时区。
Andomar的答案是将日期时间转换为总毫秒数。
您应该查看以下链接。
https://docs.angularjs.org/api/ng/filter/date
Given a DateTime object, how do I get an ISO 8601 date in string format?