Date UTC timezone js json web serverにおける関係の探究


まず、次の原則があります.
タイムゾーンがどのように変化するかは、Date date=new Date()が時点であり、不変であり、1970年1月1日からDateオブジェクトに計算された時間の間のミリ秒数として理解できる.タイムゾーンは表示されるフォーマットにすぎません.
前段にangularStrap datepickerを使用
まず,日付コンポーネント選択時間後,ページ直接呼び出し{{datetime}}は選択時間と現在選択時間の差が8時間あることを示し,このときタイムゾーン問題が暴発した.
考え方:
angularStrapで試してみるhttp://mgcrea.github.io/angular-strap/#/datepickersコンポーネントtimezoneを設定して問題を解決します.timezoneのデフォルトは現在のタイムゾーンを空にし、「UTC」は世界統一時間、つまり上記のページに表示された時間を表します.このメソッドは、属性が空であるため、問題を解決できませんでした.
検出:
console.log()方式は選択時間を出力し、正常!上記{{}}時間表示はコンポーネント自体の問題であるべきであり、UTC表示に変換される.
サーバ側が取得した時間はUTC時間であり,サーバ側で直接時間+8 hourを操作すれば問題は解決できるが,しかし!新しい問題が露呈する.
質問:バックエンド取得日は前段table表示(他の属性を含む)に転送され、ある行を変更する必要がある場合、1日付を変更すると、上記の方法は正常で、直接8 hour増加します.2他の属性を変更して保存し、日付を操作しない場合、その日付はserver側で+時に操作されます.
質問を探す~~~
FROM:
http://stackoverflow.com/questions/19564017/how-to-send-angularstrap-datepicker-value-without-timezone
The issue isn't AngularStrap. Its just how javascript dates work and how JSON formats them for transmission. When you turn a javascript date object into a JSON string, it formats the string as UTC.
For example, I'm in Utah and it is now 07:41 on 2013-10-24. If I create a new javascript date and print it to the console it will say:
Thu Oct 24 2013 07:41:19 GMT-0600 (MDT)

If I stringify that same date (using  JSON.stringify(date) , I get:
"2013-10-24T13:41:47.656Z"

which you can see is not in my current timezone, but is in UTC. So the conversion is happening just before the form gets sent to the server when it gets converted from a javascript object to a JSON string.
前段とserver端のインタフェースパラメータは、JSON形式で伝達され、date形式のパラメータ伝達が異常になる.
しかし、以前の問題を連想すると、server側が+8操作を行わずに前段日付選択の問題を一時的に捨て、上記2の場合、この時点で他の属性を修正すれば、その日付は変化しない、つまり、JSONに破られない、なぜ??
Debugにより、バックエンドが前段に示す日付はdateであることが分かった.gettime()形式が存在する、つまりLong dateであり、このような形式ではdateがJSONに移行しても異常は発生しない
最終的な解決策:
変更すると、jsを追加してserver側へ転送を通してgetTime()形式で転送する(ここではバックエンドに表示されるコードが2の場合、自身がlong dateタイプでgetTime()を呼び出すことができないため、new Date()を先に呼び出してから操作することに注意する.)
OK~問題解決.
~を続ける
前段テスト1
js:
var date = new Date()
$scope.date = date;
html:
{{date}}

フロントエンドページ表示dateがUTC形式
この問題を解決するには、次のいくつかの解決策を採用します.
var hereTimeOffset = date.getTimeOffset();
$scope.date = date + hereTimeOffset*60000;

2つ目の解決策は次のとおりです.
ページでdateにフィルタを追加

date:{{date | date:'yyyy-MM-ddTHH:mm:ss' : 'UTC+8000'}}

date2:{{date2 | date:'yyyy-MM-ddTHH:mm:ss'}}

timezoneデフォルトブラウザタイムゾーンを省略
原因分析:
1 jsでconsoleを使用する.log(date)は通常時間であり、ページに表示される時間はUTC時間であり、jsとHTML端末の日付フォーマットの転送で変更されたことを示す
2直接前段のページの中でJSの断片を書いて、正常に表示します

    var date3 = new Date();
    alert(date3);
    document.getElementById("date3").innerHTML= date3;


前端实验 2 

js:
$scope.date = JSON.stringify(date.getTime());
html:

date:{{date | date:'yyyy-MM-ddTHH:mm:ss' : ''}}


以上の日付はブラウザのデフォルトタイムゾーンとして表示され、timezoneが「UTC」の場合はUTCタイムゾーン時間が表示されます.
js:
$scope.date = date.getTime();
html:

date:{{date | date:'yyyy-MM-ddTHH:mm:ss' : ''}}


JSONは採用していません.stringify()は、結果が同じで、正常を示します.
JAVA API
public long getTime()
Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object.
Returns:
the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this date.
戻ってきたのはsince January 1,1970,00:00:00 GMT
GMTはUTCと同じと考えられる
探究:
上記の2つの実験とserver側の伝送を組み合わせて(server側はJSON受信パラメータを採用する)
結果:フィルタではなく前段に直接表示される場合、デフォルトのUTC時間です.
server側がJSON stringify変換Dateを受信すると、dateをUTCに変換する時間が時間表示に変化します.従ってlongタイプミリ秒パラメータ(タイムゾーン概念なし)を採用する.
OK、散らかって、終わり~