在我的表,我有一個包含日期毫秒這樣的柱:轉換日期爲迄今爲止
table a
dateinmili
1440301846096 //first six month date
1443589721039 //second six month date
我用我的Android設備,它工作正常。當我想在SQL Server的PROCEDURE中使用這段時間並將此時間轉換爲人類時間(對於人類而言可以理解)並且日期有問題時。
我在伊朗,它使用UTC時間在上半年波斯日期個月4.30和3.30的每秒6月份。
對於程序轉換日期我使用此代碼:
CONVERT(nVARCHAR(10),DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), DATEADD(ss,dateinmili/1000,'1970-01-01')),8) as date
DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), DATEADD(ss,dateinmili/1000,'1970-01-01')) as time
,這裏是我的問題:
當我轉換成每秒6月份和日期在上半年當月同比註冊日期,我在實時和轉換時間之間得到1小時的差異。我知道那是因爲
DATEDIFF(mi, GETUTCDATE(), GETDATE())
方法,該方法返回UTC時間與本地時間之間的不同當過其所謂的(在我的例子返回3:30 4:30沒有),但我不知道我怎麼能解決這個問題?
我可以添加包含當前UTC時間的列,但我正在尋找另一種方式。
更新
我看到this question,這不是我的問題轉換長至今。
我的問題是在我的國家UTC時間是不是在全年和3.30和4.30之間的變化不斷,比如我有日期在上半年月登記(波斯6個月),如1440271800000,現在我們都在每秒6將其轉換月(波斯六個月),並使用此代碼進行轉換。
declare @unixTS bigint
set @unixTS = 1440271800000
select dateadd(ms, @unixTS%(3600*24*1000),
dateadd(day, @unixTS/(3600*24*1000), '1970-01-01 03:30:00.0')
)
我得到這個
2015-08-22 23:00:00.000
,但它是不正確的日期;正確的日期是:
2015-08-23 00:00:00.000
因爲當時間註冊UTC爲4.30和3.30不知道,但是當我轉換 它UTC是3.30。
我希望如果有一種方法在SQL中返回過去的UTC時間不同;我的意思是把一個日期,並返回當地時間和gmt時間不同,我的問題解決了。
我希望你能理解我的問題。
你是什麼意思「date in milliseconds」?這通常是一個Uni/Linux時間戳,它是特定時間以來的毫秒數,例如1/1/1970。你需要知道基準時間(即0代表什麼),以處理這個日期。如果這確實是一個Unix時間戳,那麼您只需要將基準日期的數目加上ms。這些時間戳對應哪些日期? –
PS沒有「人性化的時間」,操作系統的不同部分可能會使用不同類型的「相同」事物。 Unix時間戳可以用於文件創建/修改日期,但它完全不適合代表任意日期,更不用說處理時區 –
[將unix時期時間戳轉換爲TSQL時間戳](http://stackoverflow.com/questions/14507649/轉換-UNIX的劃時代的時間戳到TSQL時間戳) – Ben