アプリ版:「スタンプのみでお礼する」機能のリリースについて

カテ違いの質問でしたらすみません。

現在、JAVAで作成した処理をバッチで起動する処理を行っているのですが、
該当Javaを起動するシェル(Test.rsh)をTeraTermから sh Test.rshの用に呼ぶと問題なく動きます。
この呼び方を ssh 同サーバー名 Test.rsh という風に変えると、

java.text.DateFormat Df = java.text.DateFormat.getDateInstance();
Date val = Df.parse("2005/09/16 0:00:00");

 上記parseのところで
java.text.ParseException: Unparseable date: "2005/09/16 0:00:00"
が発生してしまいます。

sh Test.rshで起動させた時も、該当JavaをWeb画面から呼び出した時もエラーにはなりません。
SSHを使用すると、getDateInstanceでの言語フォーマットが変わったりするのでしょうか・・。

似たような経験をされた方でもヒントでもいいので教えてください。
(シェルの事が分かっていないので、分かりにくい文になりすみません)

A 回答 (1件)

TeraTtermの接続(Telnet?)やWEBサーバの場合と、ssh接続時ではデフォルトロケール等の設定が違っていませんか?


これが違うと、デフォルトの日付の書式が変わってきます。

ロケールを統一したいときは、
・引数ありのgetDateTimeInstanceに、ロケールを渡す
・システム起動時に、Locale.setDefault()でデフォルトを統一
・Test.rshなどの起動シェルで、ロケール情報を設定する

書式を完全に統一したいときは、SimplaDateFormatを直接newしましょう。
"2005/09/16 0:00:00"の場合、
java.text.DateFormat parser = new java.text.SimpleDateFormat("yyyy/MM/dd H:mm:ss");
とすれば、解析できると思います。

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java … int, java.util.Locale)
    • good
    • 0
この回答へのお礼

ありがとうございます。そのとおりでした。
まさか、SSH独自でロケールの設定が必要とは知りませんでした。
SSHのロケールの設定が行われていなかったため、時間の設定がデフォルトの世界表示(?)となり、DateFormatでエラーとなっていました。
SSHのロケール設定を日本語にしたら直りました。

SimplaDateFormatは最終手段として考えていたのですが、変換を利用している関数は、Utilなので、影響範囲が大きくあまり手を加えたくなかったのでよかったです。

回答ありがとうございました。

お礼日時:2005/09/23 16:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!