1

私はこの質問がここで何度も尋ねられたことを知っていますが、まだ答えは私に解決策を提供していません。助けてください、私は壁に頭を打ちつけています。

問題:1つのページ(Default.aspx)を持つ単純なASP.NETWebフォームアプリがあります。このページには、jQuery、JSON2、Rick StrahlのServiceProxy.js、および参照されている私のjavascriptファイル(timezone.js)があります。同じプロジェクトに、ServiceProxy(jQueryの.ajax POSTの便利なラッパー)を使用してtimezone.jsから呼び出すWCFサービスがあります。呼び出しは、DateTimeプロパティを持つオブジェクトを返す必要があります。異なるタイムゾーンの2台のクライアントマシンでテストしており、異なる結果が得られています。ホストされているアプリのスクリーンショットは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で文字列を解析するのにこれほど近づいています。また、WCF対応のAjaxサービスへのPOSTを使用する必要があります。

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

「FriSep2813:30:00 UTC +01002012」と「FriSep2808:30:00 EDT 2012」はどちらも同じ時点(Sep 28 12:30 UTC)を表します。日付を統一的に表現したい場合は、toString変換するメソッドを使用せず、代わりにresult.theDate次のようなものを使用してください。toUTCString()

于 2012-09-28T19:54:47.207 に答える