1

我知道这个问题已经在这里被问过很多次了,但还没有答案为我提供解决方案。请帮忙,我正在用头撞墙。

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

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

在 GMT 机器上,我得到:WCF 调用中 js 渲染的日期:Fri Sep 28 13:30:00 UTC+0100 2012

在东部标准时间机器上,我得到:来自 WCF 调用的 js 呈现的日期: Fri Sep 28 08:30:00 EDT 2012

正如您在两个屏幕截图的右侧所看到的,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 代码:

$(函数(){

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

});

我尝试将 DateTimeKind 指定为所有不同的值,但它并没有给我准确的日期和时间。我也尝试过使用 DateTimeOffset 并得到相同的结果。我可以用这个例子做些什么来获得在服务器上创建的确切日期时间以在浏览器中呈现?谢谢你的帮助。

4

2 回答 2

3

只是为了结束这个。我正在将我的 DateTime 对象转换为字符串并让 JavaScript 在客户端上解析它们。这感觉不太好,但它确实有效。

于 2012-11-06T02:25:13.067 回答
0

'Fri Sep 28 13:30:00 UTC+0100 2012' 和 'Fri Sep 28 08:30:00 EDT 2012' 代表相同的时间点(9 月 28 日 12:30 UTC)。如果您想要日期的统一表示,请不要使用toString转换的方法result.theDate,而是使用类似的方法toUTCString()

于 2012-09-28T19:54:47.207 回答