在客户端(JS)上将C#DateTime转换为LocalTime

时间:2015-04-06 11:23:47

标签: javascript c# datetime

在服务器上,我使用Yahoo API来获取货币 http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s=USDGBP=X,USDEUR=X

在结果中我得到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

2 个答案:

答案 0 :(得分:1)

只需更改代码即可正确形成ISO 8601字符串。

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

Chrome调试控制台的屏幕截图:

Screenshot

或者,您可以确保.NET代码添加Z,确保.Kind值的DateTime设置为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已经存在。

答案 1 :(得分:0)

试试这个...我假设雅虎CSV是美国格式( m / d / yyyy )......如果没有,你需要修改月份和日期的提取方式的 fixYahooDate ...

(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());

}());