WCF正在更改jQuery.axaj调用返回的JSON格式的my DateTime

WCF正在更改jQuery.axaj调用返回的JSON格式的my DateTime,jquery,asp.net,wcf,datetime,Jquery,Asp.net,Wcf,Datetime,我知道这个问题在这里已经被问过很多次了,但是没有一个答案能为我提供一个解决方案。请帮帮我,我的头撞到墙上了 问题: 我有一个简单的ASP.NET web表单应用程序,只有一个页面-Default.aspx。这个页面引用了jQuery、JSON2、Rick Strahl的ServiceProxy.js和我的javascript文件(timezone.js)。在同一个项目中,我有一个WCF服务,我使用ServiceProxy从timezone.js调用它(它是jQuery的.ajax帖子的一个方便的

我知道这个问题在这里已经被问过很多次了,但是没有一个答案能为我提供一个解决方案。请帮帮我,我的头撞到墙上了

问题: 我有一个简单的ASP.NET web表单应用程序,只有一个页面-Default.aspx。这个页面引用了jQuery、JSON2、Rick Strahl的ServiceProxy.js和我的javascript文件(timezone.js)。在同一个项目中,我有一个WCF服务,我使用ServiceProxy从timezone.js调用它(它是jQuery的.ajax帖子的一个方便的包装器)。调用应返回具有DateTime属性的对象。我在不同时区的两台客户机上进行测试,得到不同的结果。 以下是由IIS托管的应用程序的屏幕截图:

编辑:看起来StackOverflow不允许我发布图像。这是渲染的文本

在GMT机器上,我得到: js从WCF通话中提供的日期:周五9月28日13:30:00 UTC+0100 2012

在东部标准时间机器上,我从WCF调用中获得js呈现的日期: 2012年9月28日星期五08:30:00美国东部时间

正如您在两个屏幕截图的右侧所看到的,WCF调用会在不同的时间产生结果

我希望能够完全控制返回的日期,我很快就能在服务器上将其转换为字符串并在javascript中解析该字符串。我还必须使用POST到支持WCF的Ajax服务

下面是Default.aspx的代码

public class DateContainerObject
{
    public DateTime theDate { get; set; }
}

public static class DateMaker
{
    public static DateContainerObject MakeDateObj()
    {
        DateContainerObject obj = new DateContainerObject();
        DateTime origUTCDate = new DateTime(2012, 9, 28, 13, 30, 0);
        DateTime newKindDate = DateTime.SpecifyKind(origUTCDate, DateTimeKind.Unspecified);
        obj.theDate = newKindDate;

        return obj;
    }
}

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Literal1.Text = DateMaker.MakeDateObj().theDate.ToString();
    }
}
以下是WCF服务代码:

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TimeZoneService
{
    [OperationContract]
    public DateContainerObject GetDateObject()
    {
        return DateMaker.MakeDateObj();
    }
}
这是timezone.js代码:

$(函数(){

}))

我已经尝试将DateTimeKind指定给所有不同的值,但它不能提供准确的日期和时间。我也尝试过使用DateTimeOffset,得到了相同的结果。 对于这个示例,我可以如何获得在服务器上创建的要在浏览器中呈现的确切日期时间?
感谢您的帮助。

两个“2012年9月28日星期五13:30:00 UTC+0100”和“2012年9月28日星期五08:30:00 EDT”代表相同的时间点(UTC 9月28日12:30)。如果希望统一表示日期,请不要使用
toString
方法转换
结果。日期
,请使用类似于
toutString()的方法来结束此操作。

。我正在将DateTime对象转换为字符串,并让JavaScript在客户端上解析它们。这感觉不太好,但很管用。

我想你的服务是在利用REST,对吧?这是一个WCF服务的帖子。该服务仅实现POST,因此未完全满足REST规范。谢谢Carlos。但是,我只在服务器呈现代码中使用ToString,而这个问题根本不存在。我遇到的问题是让WCF服务返回我指定的日期和时间。在本例中,我希望2012年9月28日13:30发送到任何时区的浏览器。问题是JS没有“未指定”日期时间的概念-IIRC它始终存储为UTC,您可以将其打印到UTC或本地时间。您可以选择以UTC(
new DateTime(2012,9,28,13,30,0,DateTimeKind.UTC)的形式发送数据
,并且在客户端,在打印日期时使用
toutString
。或者,如您所建议的,如果您想在服务器端控制格式,请使用字符串而不是日期。Carlos。再次感谢您的帮助。我最终将datetime转换为字符串(“f”)在服务器上,让JavaScript进行解析。这样做并不会给我温暖的模糊感觉,但确实有效。
var dObj = {};
var proxy = new ServiceProxy("/TimeZoneService.svc/", { isWcf: true });
proxy.invoke("GetDateObject",
        dObj,
        function (result) {
            $('#spanDateJSRender').text(result.theDate);
        },
        function (e) {
            alert(e);
        },
        function () { },
        false
        );