- PR -

Dateクラスで曜日を表示したい

投稿者投稿内容
kokansetu
常連さん
会議室デビュー日: 2007/01/25
投稿数: 41
投稿日時: 2007-06-08 11:02
お世話になっております。

Seasar2で開発をしています。

環境:
Windows XP
Dolteng 0.17.0
s2framework-2.4.8
s2Dao-1.0.39
H2 Database Engine

Dateクラスで日付と曜日を表示したいのですが、
曜日は表示されません。
ソースコードは、次のようなかんじです。

Date rentDate = new Date();
DateFormat df =
new SimpleDateFormat("yyyy-MM-dd (EE)");
df.format(rentDate);
rentInfo.setRentDate(rentDate);
rentInfoDao.insert(rentInfo); //insert()のSQLはS2Daoが自動生成する

【RentInfo.java】
public class RentInfo {
private Date rentDate;
public void setRentDate(Date rentDate) {
this.rentDate = rentDate;
}
------getter省略---------
}

【RentInfoDao.java】
public interface RentInfoDao {
public Class BEAN = RentInfo.class;
public int insert(RentInfo rentinfo);
}

これで、データベースにinsertされるのは
2007-06-08 という日付だけです。
2007-06-08 (金) というように
曜日もいっしょにinsertしたいのです。

rentInfoテーブルのrentDateカラムの
データ型は Date です。
Date型では、曜日はinsertされないのでしょうか?

ご教授いただけたら、ありがたいです。
宜しく御願いいたします。
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2007-06-08 11:20
文字列型などではないので、表示形式が違うだけです。
H2 Database Engineというのは知りませんが、
oracleなら、「TO_CHAR」などを使用すれば取得できます。

#日付型であるならば、曜日のinsert自体無意味ですね。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-06-08 11:24
曜日は日付から一意に決まるので、insertしてもデータの無駄でしょう。

>2007-06-08

これはビュアが自動的に文字列に直してくれてるだけで、DBにこういう形で登録されてるわけではないです。

insertしたいなら、

>df.format(rentDate);

せっかくフォーマットしたのに捨ててしまってる、この文字列を入れないと。
ただ、その場合はDBからのselect時に、文字列をパースしてDateに直してあげないといけませんが。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2007-06-08 11:27
引用:

kokansetuさんの書き込み (2007-06-08 11:02) より:

これで、データベースにinsertされるのは
2007-06-08 という日付だけです。
2007-06-08 (金) というように
曜日もいっしょにinsertしたいのです。


曜日は、固有の情報として保存されるものではありません。
だいたい、日付が決まれば、曜日も決まるでしょ。
引用:

Date rentDate = new Date();
DateFormat df =
new SimpleDateFormat("yyyy-MM-dd (EE)");
df.format(rentDate);
rentInfo.setRentDate(rentDate);
rentInfoDao.insert(rentInfo); //insert()のSQLはS2Daoが自動生成する


「df.format(rentDate)」が何を意味するのか、理解していますか?
これがどのような動作を行うのか、
どんな結果を返すのかをちゃんと確認したら、
さらに、ここでこのコードが必要なのかどうか判断できるようになったら、解決するでしょう。
kokansetu
常連さん
会議室デビュー日: 2007/01/25
投稿数: 41
投稿日時: 2007-06-10 11:10
Edossonさん、mioさん、koxさん、
お返事ありがとうございました。

私なりにいろいろ試したのですが、
うまくいきません。

そこで、今度は、insertではなくselectする時に、

rentInfo = rentInfoDao.findRentInfo();
Date rentDate = rentInfo.getRentDate();
DateFormat df =
new SimpleDateFormat("yyyy-MM-dd (EE)");
String date = df.format(rentDate);
rentDate = df.parse(date);
rentInfo.setRentDate(rentDate);

と、書いてみたのですが、これでも
表示されるのは、2007-6-10 だけで
曜日は表示されません。
根本的なことが、わかってないのでしょうか?

[ メッセージ編集済み 編集者: kokansetu 編集日時 2007-06-10 11:15 ]

[ メッセージ編集済み 編集者: kokansetu 編集日時 2007-06-10 11:19 ]

[ メッセージ編集済み 編集者: kokansetu 編集日時 2007-06-10 11:21 ]
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-06-10 11:41
yyyy/MM/dd (EEE)としてみて。
あと
「日曜」「月曜」…「土曜」という戻り値を求めているなら無理だった気がします。

ぁ・・・
DATE型にもどしてたらフォーッマトきえるの当たり前・・・・

[ メッセージ編集済み 編集者: 杏 編集日時 2007-06-10 11:43 ]
kokansetu
常連さん
会議室デビュー日: 2007/01/25
投稿数: 41
投稿日時: 2007-06-10 15:05
引用:

杏さんの書き込み (2007-06-10 11:41) より:

ぁ・・・
DATE型にもどしてたらフォーッマトきえるの当たり前・・・・

[ メッセージ編集済み 編集者: 杏 編集日時 2007-06-10 11:43 ]



杏さん、お返事ありがとうございました。

DATE型にもどさずにSTRING型のままにしたら
曜日も表示されました。
ありがとうございました。
flatline
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 102
投稿日時: 2007-06-10 18:38
解決してしまったようですが、日付型について根本的なところがわかっていないと思われます。
Date型に値の実体は、ある特定の数値です。たとえば、Java でのDate型は、
「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数」
と定義されています。
言い換えると、この数値には、年月日、曜日、時分秒ミリ秒など、全ての情報が格納されています。
表示するときに、年月日、月日、曜日付きの年月日など、いろいろな形式に変換するわけです。

このあたりの基本を理解しておかないと、日付を日付型ではなく、8桁の文字列とかで操作したりするようになります。




スキルアップ/キャリアアップ(JOB@IT)