6

OK皆さん、私はこの問題を約2週間回避してきました。今、私が考えられるすべてのことを試し、ここで彼らが答えようとしているように感じるたくさんの答えを見ていますが、私はどういう意味か理解できません。私がやろうとしていることをしてください、そしてそれは私を絶対にNUTSに駆り立てています!誰も答えをどこにも持っていないようで、至る所に半分の答えがありますが、実際に私が必要なことをしている人はいないようです、確かに誰かが以前にこの問題を解決しました!本当に長い質問を許してください、しかし答えが実際に必要性に答えるように、質問が正しく尋ねられることが重要です!:D

また、私のデータストア/サーバーがGoogle App Engine(GAE)であり、クライアントがGoogle Web Toolkit(GWT)とすべてで記述されていることを考慮しない回答を提供する可能性がある場合は、これ以上読む必要はありません。 Javaで書かれているので、Python、MySQL、PHPなどについては何も知りません。

最後に、誰かがこのようなものを理解するためのより良い場所を知っている場合は、私がこのような問題を考え続け、ここ以外で解決策を見つける方法がわからないので、私に知らせてください、またはグーグルを検索するのに何時間も費やしてくださいすでにそれを理解している他の誰かのために。また、JavaDocsから何かを理解する方法もわかりません-申し訳ありませんが、誰かが私にそれを説明するまで、私はそれを取得するつもりはありません

サーバーに日時を保存しています(UTCで明らかに)。また、文字列として保存されている各ビジネスオーナーのTimeZoneをサーバーに保存しています(例"America/New_York")。この文字列はjava.util.TimeZone.getAvailableIDs()、サーバーで使用し、ビジネスオーナーにビジネスに関連するタイムゾーンを選択させることで取得されます(デフォルトは"Europe/London"、何も選択しない場合です。そのビットにこだわる必要はありません)日時を返す必要があります将来のある時点でクライアントPCに送信し、PCのローカルタイムゾーンを無視します。これは、ビジネスオーナーのタイムゾーンに従って日時を表示する必要があるためです。

たとえば、ビジネスオーナーはロンドンの美容師であり、オンラインの予約スケジュールがあり、潜在的な顧客が閲覧できます。これらの顧客の1人(ロンドンにもいる)は、予約を希望しており、9月3日月曜日の午前9時BSTにスロットを見て、予約します。

次に、これはUTC時間(BSTはUTC + 1であるため、実際には0800)としてデータストアに保存されます。もちろん、ビジネスオーナーは"Europe/London"タイムゾーンとして選択します。これまでのところすべて問題ありません。

現在、将来のある時点で、顧客はニューヨークでビジネス会議を行っており、翌週にロンドンでヘアカットの予約があり、それを1週間移動したいと考えていることに気付いたので、次のことを試みます。 (美容院の予約帳で)予定を表示しますが、ニューヨーク時間の午前4時として表示したくないので、英国時間の午前9時として表示したいと考えています。

java.util.TimeZoneだから私の問題は、顧客が9月3日にアポイントメントを表示するためにクリックすると、サーバーは0800のUTC日時と0800のID文字列を送り返すことができるということです"Europe/London"

しかし、クライアントでは私が使用できるのは

com.google.gwt.i18n.client.TimeZone

関数を使用できません

TimeZone bizTimeZone=TimeZone.getTimeZone("Europe/London")
(which works for `java.util.TimeZone`)

エラーが発生するため

"The method getTimeZone(String) is undefined for the type TimeZone"

に変更することをお勧めします

com.google.gwt.i18n.client.TimeZone.createTimeZone("Europe/London")

ただし、このバージョンでは、が受け入れる単純な文字列ではなく、GWT com.google.gwt.i18n.client.TimeZoneConstants「オブジェクト」(このメッセージの最後に示されている例)を想定しています。java.util.TimeZone.createTimeZone()

これは、次を使用して作成できます。

final TimeZoneConstants constTz = GWT.create(TimeZoneConstants.class);
final TimeZone timeZoneCali = TimeZone.createTimeZone(constTz.europeLondon());

しかし、私が始めたときにこれを行う方法がわからない、"Europe/London"および/またはこのオブジェクトをAppEngineデータベースに保存して後で取得する方法がわかりません。

ちなみに、コメントされたテキストの中で、私は次の行も使用してみました。

//Calendar tmad = new GregorianCalendar(TimeZone.getTimeZone("Europe/London"));
//Calendar cal = Calendar.getInstance(someTimeZone);
//DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//df1.setTimeZone(TimeZone.getTimeZone("Europe/London"));
//final TimeZone timeZoneClient = TimeZone.createTimeZone("Europe/London");
//dtf.format(date,timeZoneClient)

確かにこれを行うための標準的な方法がなければなりません、私は本当にこの問題を解決しなければならない最初の人になることはできません!

constTz.europeLondon()= {"transitions":[19394、60、24770、0、28130、60、33506、0、36866、60、42242、0、45602、60、50978、0、54506、60、59714、 0、63242、60、68450、0、71978、60、77354、0、80714、60、86090、0、89450、60、94826、0、98521、60、103561、0、107257、60、112297、0、 115993、60、121033、0、124729、60、129937、0、133633、60、138673、0、142369、60、147409、0、151105、60、156145、0、159841、60、164881、0、168577、 60、173785、0、177313、60、182521、0、186217、60、191257、0、194953、60、199993、0、203689、60、208729、0、212425、60、217465、0、221161、60、 226201、0、230065、60、235105、0、238801、60、243841、0、247537、60、252577、0、256273、60、261481、0、26509、60、270217、0、273745、60、278953、 0、282649、60、287689、0、291385、60、296425、0、300121、60、305329、0、308857、60、314065、0、317593、60、322801、0、326329、60、331537、0、335233、60、340273、0、343969、60、349009、0、352705、60、357913、0、361441、60、366649、0、370177、60、375385、0、379081 60、384121、0、387817、60、392857、0、396553、60、401593、0、405289、60、410497、0、414025、60、419233、0、422761、60、427969、0、431665、60、 436705、0、440401、60、445441、0、449137、60、454345、0、457873、60、463081、0、466609、60、471817、0、475513、60、480553、0、484249、60、489289、 0、492985、60、498025、0、501721、60、506929、0、510457、60、515665、0、519193、60、524401、0、528097、60、533137、0、536833、60、541873、0、 545569、60、550777、0、554305、60、559513、0、563041、60、568249、0、571777、60、576985、0、580681、60、585721、0、589417、60、594457、0]、 "名前":[" GMT "、"グリニッジ標準時 "、" BST "、"英国の夏時間 "]、"id": "ヨーロッパ/ロンドン"、 "std_offset":0}

4

2 に答える 2

2

v2.4でも同様の問題があります。

ライリー・ラークは正しいと思います。

TimeZone.createTimeZone("Asia/Tokyo")が GWT 2.4 で機能しなかった

ただし、ブラウザーのデフォルト設定を使用して、次の方法で東京ゾーンを取得できることがわかりました。

Date d = new Date();
TimeZone timezone = TimeZone.createTimeZone(d.getTimezoneOffset());

europeLondon には "std_offset": 0...

TimeZone タイムゾーン = TimeZone.createTimeZone(0);

于 2012-08-17T02:12:58.023 に答える
0

たとえば、試しましたTimeZone.createTimeZone("Europe/London");か?少なくとも GWT の新しいバージョンでは、このメソッドは、明らかに「CLDR および Olson タイム ゾーン データベース[原文のまま]」から準備された名前を大量に受け入れます。ドキュメントでは、ユースケースを具体的に参照しています: json を介したタイムゾーンの転送。

プロパティ ファイルを参照してください。タイムゾーンの標準名がすべて含まれているようです。

それでもうまくいかない場合は、タイムゾーンのオフセットを分単位で送信してから、 でタイムゾーンを作成できますTimeZone.createTimeZone(offsetInMinutes)

于 2012-08-16T19:03:47.390 に答える