2015-04-06 66 views
0

在我使用雅虎API用於獲取貨幣 http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s=USDGBP=X,USDEUR=X轉換C#日期時間到本地時間在客戶端(JS)

在結果

服務器我得到DateTime,並想將其轉換爲DateTime對象,所以我以後可以將其轉換爲本地時間爲客戶

我用下面的

DateTime d = dateOnly.Add(timeOnly.TimeOfDay); 

做到了我現在想將其轉換爲當地時間上客戶端(JavaScript)的

我試圖在客戶端上

var d = new Date(d + " UTC"); 
alert(d.toString()); 

編輯 d值2015-04-06T12:32:00

,但得到的錯誤Invalid Date

+0

看看Datetime.Parse – Alessio 2015-04-06 11:27:26

+4

那麼在結果中是什麼'data [1] .DateTime'?你還沒有告訴我們'DateTime'如何表現給客戶端... – 2015-04-06 11:27:28

+0

Jon,d是返回的結果,我修改了我的答案(它是一個DateTime對象) – user829174 2015-04-06 11:30:13

回答

0

嘗試......我假定雅虎CSV是美國格式(m/d/yyyy)...如果不是,您需要修復如何在文件中提取月份和日期xYahooDate ...

(function() { 
    'use strict'; 

    String.prototype.pad = function(c, l) { 
     return (new Array(l + 1).join(c) + this).substr(-l, l); 
    }; 

    function fixYahooDate(aDate) { 
     var match = /(\d?\d)\/(\d?\d)\/(\d+)/gi.exec(aDate); 
     var m = match[1]; 
     var d = match[2]; 
     var y = match[3];  
     var sm = m.pad('0', 2); 
     var sd = d.pad('0', 2);  
     var fixedDate = sm + "/" + sd + "/" + y; 
     return fixedDate; 
    } 

    function fixYahooTime(aTime) { 
     var match = /(\d?\d):(\d\d)(am|pm)/gi.exec(aTime); 
     var h = match[1]; 
     var m = match[2]; 
     var a = match[3]; 
     var sh = h.pad('0', 2); 
     var fixedTime = sh + ":" + m + ":00 " + a + " UTC"; 
     return fixedTime; 
    } 

    function YahooDateTimeToLocal(aDate, aTime) { 
     var s = fixYahooDate(aDate) + " " + fixYahooTime(aTime); 
     console.log(s); 
     var dt = new Date(s); 
     return dt; 
    } 

    var aDate = "4/6/2015"; 
    var aTime = "12:29pm"; 

    var localDt = YahooDateTimeToLocal(aDate, aTime);  
    console.log(localDt.toString()); 

}()); 
1

只需更改您的代碼以正確形成ISO 8601字符串。從Chrome中調試控制檯

var d = new Date(d + "Z"); 

截圖:

Screenshot

或者,你可以確保Z被.NET代碼添加通過確保您DateTime.Kind設置爲DateTimeKind.Utc

例如:

d = DateTime.SpecifyKind(d, DateTimeKind.Utc); 

或者更好的是,你可以解析它作爲UTC開始。

string dateOnly = "4/6/2015"; 
string timeOnly = "11:32pm"; 

DateTime dt = DateTime.ParseExact(dateOnly + " " + timeOnly, 
    "M/d/yyyy h:mmtt", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal); 

這可能是最安全的方法。現在這種類型已經是UTC,並且Z將已經到位。

+0

也值得注意的是, API似乎沒有返回正確的值。我剛剛運行了它,並且它的時間比當前UTC時間提前了整整一個小時。我的猜測是他們正在從本地時區轉換到UTC,而不是在這個過程中考慮DST。 – 2015-04-06 22:38:58

相關問題