SSH起動時のDateFormat(日付型)

このQ&Aのポイント
  • 現在、JAVAで作成した処理をバッチで起動する際に、SSHを使用すると日付型の処理でエラーが発生します。
  • shコマンドを使用してバッチを起動する場合は問題ありませんが、sshコマンドを使用すると日付フォーマットが変わってしまうため、エラーが発生します。
  • 同じ問題に悩んでいる方へのヒントや解決策を教えてください。
回答を見る
  • ベストアンサー

SSH起動時のDateFormat(日付型)

カテ違いの質問でしたらすみません。 現在、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での言語フォーマットが変わったりするのでしょうか・・。 似たような経験をされた方でもヒントでもいいので教えてください。 (シェルの事が分かっていないので、分かりにくい文になりすみません)

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • deadlock
  • ベストアンサー率67% (59/87)
回答No.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/text/DateFormat.html#getDateTimeInstance(int, int, java.util.Locale)
vivid8_tihiro
質問者

お礼

ありがとうございます。そのとおりでした。 まさか、SSH独自でロケールの設定が必要とは知りませんでした。 SSHのロケールの設定が行われていなかったため、時間の設定がデフォルトの世界表示(?)となり、DateFormatでエラーとなっていました。 SSHのロケール設定を日本語にしたら直りました。 SimplaDateFormatは最終手段として考えていたのですが、変換を利用している関数は、Utilなので、影響範囲が大きくあまり手を加えたくなかったのでよかったです。 回答ありがとうございました。

関連するQ&A

  • 文字列を日付に変換でParseException

    文字列を日付に変換するところで、「ParseException: Unparseable date: "2013/08/06"   at java.text.DateFormat.parse(DateFormat.java:335) 」とエラー表示されました。 実際のコーディングは Date sgndate = new Date(); if(!StringUtil.isNull(rs.getString("sgnymd"))){ String lstdaysgn = rs.getString("sgnymd"); lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +                               lstdaysgn.substring(8,10); sgndate = DateFormat.getDateInstance().parse(lstdaysgn); ・・・・・・・・・ここでエラー発生 } どこが悪いのか解りません。 よろしくご教授ください。

    • ベストアンサー
    • Java
  • tomcat再起動でエラーが解消する

    CentOS 6.4、Java 1.7、Tomcat 7.0で作ったWebサーバーです。 サーバー起動後の画面入力の日付項目で下記エラーが発生します(ログの一部)。 2013/06/12 09:40:11.212 [ERROR] - Unparseable date: "2013/06/12" java.text.ParseException: Unparseable date: "2013/06/12" at java.text.DateFormat.parse(DateFormat.java:357) サーバーにログインし、tomcatを再起動するとエラーは解消します。 原因がわからないので対症療法で /et/rc.local にtomat再起動のコマンドを書いてやってみましたがエラーは解消しません。 タイミングかとも思い再起動コマンドの前に sleep 60 とか入れてみましたが変わりません。 どなたか解決のヒント、もしくは「ここらへんを調べてみたら?」といった情報ををお教え願えませんでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 日付処理について

    いつもお世話になっております。 Java初心者です。 以下のとあるサンプルコードを理解しようと思い、調べているんですがAPI仕様などを見ても、どうも理解出来ないんです。 /** * 日付文字列をDateオブジェクトに変換します. */ public static Date stringToDate(String datestr){ Date date = null; try { date = new Date(DateFormat.getInstance().parse(datestr).getTime()); } catch (ParseException e) { } return date; } 引数;2004/11/22 00:00:00 戻り値:2004-11-22 という結果になります。 Javaに慣れてない為、 “date = new Date(DateFormat.getInstance().parse(datestr).getTime());” といったような書き方があると頭がついていけなくなる状態です。 どうか分かりやすいご説明を宜しくお願いします。

    • ベストアンサー
    • Java
  • java String型から日付型へ変換

    こんにちは 現在javaのPGで日付チェックを行いたくプログラムを組んでいるのですが、色々なサイトを見ながら以下のようなものを書きました。 しかし、動かすと必ず例外にcatchされていまいます。 なぜ例外処理をされてしまうのか、原因がわかりません。 何がいけないのでしょうか?? ご教授お願いいたします。 import java.util.Date; import java.text.DateFormat; import java.text.SimpleDateFormat; //strbeginDate, strcloseDateはフォームよりString型で受け取ります。 String strbeginDate, strcloseDate; SimpleDateFormat DatebeginDateformat = new SimpleDateFormat("YYYYMMDD"); SimpleDateFormat DatecloseDateformat = new SimpleDateFormat("YYYYMMDD"); Date datebeginDate = DatebeginDateformat.parse( strbeginDate ); Date datecloseDate = DatecloseDateformat.parse( strcloseDate ); intflag = datebeginDate.compareTo(datecloseDate);

    • ベストアンサー
    • Java
  • 文字列のDateFormatへのパース

    とても単純なことを私が誤解しているのだと思うのですが、 文字列のDateFormatへのパースに関して、  DateFormat f = new SimpleDateFormat( "yyyy.MM.dd 'at' HH:mm:ss" );  try {   f.parse( "2001.07.04 at 12:08:56" );  } catch (ParseException e) {   e.printStackTrace();  } この形式だと正しくパースできるのですが、アルファベットの月や曜日が 含まれた下のような形式では、  java.text.ParseException: Unparseable date: "Wed, Jul 4, '01" 例外が発生してしまいます。  DateFormat f = new SimpleDateFormat( "EEE, MMM d, ''yy" );  try {   f.parse( "Wed, Jul 4, '01" );  } catch (ParseException e) {   e.printStackTrace();  } この下のデータサンプルはJavadocに掲載されている基本的な例ですので、 エラーになるはずはないのですが、ご助言頂ければ幸いです。

    • ベストアンサー
    • Java
  • 日付フォーマットの変換についての質問。

    こんにちは。宜しくお願いします。 現在、String型で受け取った日付の文字列をData型にして、さらに違う日付フォーマットにするプログラミングを書いています。 具体的には、 String型の"Wed, 07 Dec 2005 00:00:00 +0900"を、 Date型の"Wed, 07 Dec 2005 00:00:00 +0900"に変更して、 同じくDate型の、"2005-12-07T00:00:00+09:00"にしたいのです。 今躓いてる点は、String型の日付をDate型に変換する所で、エラーメッセージが、” Unparseable date: "Wed, 07 Dec 2005 00:00:00 +0900"”となっており、コード修正しても上手くいきません。 現時点でのコードを記述しますので、お時間があるときにご教授お願いします。 ---- import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 時間のフォーマット変換テスト。 * */ public class testConvertTime { public static void main(String[] args) throws ParseException { String strPreTime = "Wed, 07 Dec 2005 00:00:00 +0900"; //2005-12-07T03:00:12+09:00 SimpleDateFormat sdf = new SimpleDateFormat(); //日付の出力形式を設定 sdf.applyPattern( "EEE, dd MMM yyyy HH:mm:ss Z" ); //指定したフォーマットで日付が返される Date dat = sdf.parse(strPreTime); //java.util.Date dat = sdf.parse(strPreTime); } }

    • ベストアンサー
    • Java
  • Linux間のリモートシェルの実行について

    マシンタイプ:x225 カーネル: 2.4.20-28.7smp OS:Red Hat Linux 7.3 2.96-126)) 上記のLinuxサーバからrshで同じタイプのリモートのLinuxサーバのシェルを起動しようとしましたが正常に起動されません。 状況としては rsh実行時は特にエラーメッセージが出ることもなく、正常に実行されたかのように終了してしまうため、何が悪いのかもわからない状態です。 実行したコマンドとリモート側のシェルの内容は以下の通りです。 rsh server1 /home/test/testrsh.sh <testrsh.sh> #!/bin/ksh time=`date` echo "rsh test $time" >> /home/test/testrsh.log ちなみに rsh server1 date や rsh server1 uname 等のLinuxのコマンドは正常に実行できます。 どこを確認したらよいでしょうか? よろしくお願いします。

  • シェルスクリプトでsshの初回ログイン処理をしない

    以下のような処理はシェルスクリプトで実装可能でしょうか。 【host.txt】 aaaホスト bbbホスト cccホスト 【test.sh】 for (【host.txt】の一覧) {  if (ホストに対してAre you sure you want to continue connecting (yes/no)?と聞いてきた) {   # ssh初回ログイン時  } else {   # ssh初回ログインではない  } }

  • rshのコマンドの書き方について

    rsh server cd temp rsh server ls など、rshの単体コマンドに関してはすでに通る状況になっています。 しかし、今回やりたいのは 「tempフォルダに降りてきて該当ファイルを削除し、その結果を表示」 などのシェルで書くならば複数行に当たる内容になります。 これも何とかできるでしょうか? rcpでシェルスクリプトを転送して、 rshで向こう側で実行して、 rshでrmする方法も考えたのですが、いまいち鬱陶しいんで スムースに書けたらなと思いました。 とりあえず、test.rshにコマンドをずらっと書いての rsh server -ni <test.rsh ではダメでした。 関係ないでしょうがOSはSorarisです。

  • シェルからssh接続

    お世話になります。 現在、シェルからssh接続してファイルの存在確認を行いたく以下のようなシェルを作成したのですが、 上手く動作できなく困っております。(ssh接続したところで動きが、とまります。) 解決策が、わかる方がいらっしゃいましたらご教授願えますでしょうか。 私の使用している環境は、接続元・接続先ともにcentOS5.5です。 公開鍵を設定し以下のようにノンパスワードでログインできる事は、確認しております。 [root@localhost ~]# ssh 192.xxx.xxx.xxx Last login: Sun Jan 8 16:45:13 2012 from 192.168.1.250 [root@localhost ~]# ※以下のシェルは、javaのテストプログラム数文を実行しテストで出力するファイルの存在チェック  を行っています。 #!/bin/sh FILEDIR=/usr/local/test JAVADIR=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin TESTDIR=/temp/Test_pro INPUTDIR="${TESTDIR}/input" WORKDIR="${TESTDIR}/work" JARFILE="${TESTDIR}/Test.jar" PROFILE="${TESTDIR}/set.property" REMOTEHOST=192.xxx.xxx.xxx #FILEDIR内のディレクトリを削除 rm -Rf ${FILEDIR}/* TESTTARGET=`find ${WORKDIR} -type f | sort -r` for FILE in ${TESTTARGET} ;do echo "${FILE} START " #テスト対象プロパティファイル削除 & 移動 cd ${INPUTDIR} rm -f ./* cd ${WORKDIR} cp -p ${FILE} ${INPUTDIR} #実行環境へ移動 cd ${JAVADIR} #実行 java -jar ${JARFILE} ${PROFILE} echo "192.xxx.xxx.xxx" `ifconfig` LOGIN=`ssh ${REMOTEHOST}` echo ${LOGIN} echo "192.xxx.xxx.xxx" `ifconfig` #ファイル作成確認 cd ${FILEDIR} FILECNT=`find ./ -name [0-9]* | wc -l` if [ ${FILECNT} -eq 1 ] ; then DIRNAME=`ls` echo "FILE MAKE " ${DIRNAME} mv ${DIRNAME} ${FILE]} echo "FILE RENAME " ${FILE} else echo "FILE NOT MAKE " fi echo "${FILE]} END " done お手数お掛け致しますが、よろしくお願い致します。

専門家に質問してみよう