web-dev-qa-db-ja.com

GWTでJava.util.Calendarを使用する方法

GWTエントリポイントでJava.util.Calendarを使用する必要がありますが、アプリケーションの実行中にエラーが発生しました。これは、GWTがソースコードを見つけることができないためです。とにかくこの問題を修正できます。

前もって感謝します!!!

20
Delli Kilari

Java.util.Calendarはエミュレートされたクラスではありません。エミュレートされたクラスのリストはここにあります:

http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html

クライアント側で日付/カレンダーライブラリを使用しないことを強くお勧めします。あなたはおそらく自分自身をトラブルに巻き込むだけでしょう。実際、Java.sql.DateとJava.util.DateはGWTでエミュレートされていますが、私はこれらも使用しません。カレンダーの使用を検討している場合は、クライアントでタイムゾーンをサポートする可能性があります。エミュレートされたDateクラスを使用して、クライアントのDateをブラウザのタイムゾーンからターゲットタイムゾーン(GMTまたはユーザー設定でユーザーが定義したもの)に変換する必要があります。これは間違いなくエラーが発生しやすいでしょう。 GWTのTimeZoneを使用すると、他の問題が追加されます。たとえば、Java TimeZonesとGWTTimeZonesの間でどのようにマッピングしますか?

サーバーですべての日付操作とフォーマットを行うことをお勧めします。クライアントでは、日付/月/年のトリプレットを使用するだけです。サーバーは、ユーザー(または組織)とJava.util.TimeZone(またはjodaタイムゾーン)の間に関連付けを行うことができます。トリプレットとタイムゾーンを使用すると、特定のインスタンスを時間内に簡単に作成できます。

19
nogridbag

com.google.gwt.user.datepicker.client.CalendarUtilを使用できる場合があります。

16
Churro

JavaScriptには同等のものがないため、GWTでJava.util.Calendarを使用する方法はありません。しかし、受け入れられた 機能要求 があります。たぶん、あなたはリクエストのコメントにいくつかのヒントを見つけるでしょう。

5

以下は、JodaTimeを使用してJava DateタイプからJodaTimes format()関数を使用して日付情報を抽出し、それを使用してnew Date() JodaTimeのparse()関数を使用します。

static DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss.SSS");
static DateTimeFormat datefmt = DateTimeFormat.getFormat("yyyy-MM-dd ");
static DateTimeFormat timefmt = DateTimeFormat.getFormat("HH:mm:ss.SSS");

public Date getDateTime(Date date, Date time) {
    String datetime = datefmt.format(date) + timefmt.format(time);
    return dtf.parse(datetime);
}
3

数学を直接実装することを好む人のために、Calendarや非推奨の関数を使用せずに既存の日付オブジェクトに日を追加する方法の解決策を次に示します。

private Date addDays(Date dateIn, int numDays)
{
   long milisPerDay = 86400000;

   // convert the dateIn to milliseconds
   long dateInMilis = dateIn.getTime();

   // add numDays to the date
   dateInMilis = dateInMilis + (numDays * milisPerDay);

   return new Date(dateInMilis);
}


現在の年を文字列として取得する方法は次のとおりです(著作権表示に非常に役立ちます)

long time = System.currentTimeMillis();
long milisPerYear = new BigInteger("31536000000").longValue();
String currentYear = String.valueOf((int) Math.floor(time / milisPerYear) + 1970);

1日、1年のミリ秒数などの定数は、Googleで簡単に見つけることができます。 1か月のミリ秒数は月によって異なるため、注意が必要なのは月の追加です。需要があれば、月を足したり引いたりするために、関数を書いてここに投稿していただければ幸いです。

0
emery

クラスの実際のコードをプロジェクトに追加してみましたか?一部のJava SDKクラスは、JREホワイトリストに含まれていなくても正常にコンパイルされます。

0
okrasz