プログラマメモ2

2009-10-22

0002/11/30の謎


Javaです。

下記のようなコードに出会いました。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDate {

public static void main(String[] args) throws ParseException {
a("20091022");
a("00000000");
}

static void a(String s) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Date date = format.parse(s);
System.out.printf("in:[%s] out:[%s]%n", s, new SimpleDateFormat(
"yyyy/MM/dd").format(date));
}
}


動かしたらこんな結果になりました。
in:[20091022] out:[2009/10/22]
in:[00000000] out:[0002/11/30]


気分としては、00000000を渡したら、0000/00/00になって欲しかったのですが、
Dateを使う実装だったので、0002/11/30という値になったわけです。

どうして0002/11/30になるんですかね?

0002/11/30でグーグルさんに尋ねるといくつかヒットしますね。




2009-10-19

ダングリングタプル - 宙ぶらりんなタプルだよ


ダングリングタプル(dangling tuple)
結合時に相手がいないタプルのことをダングリングタプルというらしい。
結合不能タプルともいうようだ。

danglingって宙ぶらりんとかいう意味があるらしい。

で、このダングリングタプルから、外部結合(outer join)の話となるわけ。

この用語は下記の本で知りました。

データベースの仕組み (情報科学こんせぷつ)
4254127138




2009-10-18

H2でテーブル作成時のSQLを取得


H2データベースです。

select SQL from INFORMATION_SCHEMA.tables;


システムテーブルであるINFORMATION_SCHEMAからいろいろ情報取得できます。

webのH2コンソールで、ためしてみました。


実験するときに使いやすいのでついつい使ってしまうH2です。




2009-10-16

[java]行と列をいれかえる


行と列をいれかえます。

どんなことをしたいかというと下記のようにしたいわけです。

a b c
1 2 3
e f g
4 5 6

a 1 e 4
b 2 f 5
c 3 g 6


さらにこんな感じ。
1 2 3 4
5 6 7 8
a b c d
e f g h

1 5 a e
2 6 b f
3 7 c g
4 8 d h


コードこんな感じ。

public class TestR_C {
public static void main(String[] args) {
String[][] ss = new String[][] { { "a", "b", "c" }, { "1", "2", "3" },
{ "e", "f", "g" }, { "4", "5", "6" } };
print(ss);
System.out.println();
print(a(ss));
System.out.println();
ss = new String[][] { { "1", "2", "3", "4" }, { "5", "6", "7", "8" },
{ "a", "b", "c", "d" }, { "e", "f", "g", "h" } };
print(ss);
System.out.println();
print(a(ss));
}

static String[][] a(String[][] ss) {
int r = 0;
int c = ss.length;
{
for (String[] s : ss) {
if (r < s.length)
r = s.length;
}
}

String[][] ss2 = new String[r][c];

int rp = 0;
for (String[] s : ss) {
int cp = 0;
for (String val : s) {
ss2[cp][rp] = val;
cp++;
}
rp++;
}

return ss2;
}

static void print(String[][] ss) {
for (String[] s : ss) {
for (String val : s) {
System.out.printf("%s ", val);
}
System.out.println();
}
}

}




 

プログラマの本棚