エポック
日本語 | 時代 |
英語 | Epoch |
ふりがな | えぽっく |
フリガナ | エポック |
アプリケーションが使用する日時の「開始日時」。
世界標準時の「1970/01/01 00:00:00.000」である。
多くのコンピューターは、内部時計による時間を、世界標準時の「1970/01/01 00:00:00.000」からの経過ミリ秒で管理する。
この、経過時間を数える「開始時点」となる「1970/01/01 00:00:00.000」を「エポック」と呼ぶ。
現在日時等、日時の管理は多くの場合このエポックからの「のべミリ秒」で行う。
エポックからのミリ秒で日時を管理することで、秒から分への繰り上がり等を気にする必要がなくなり、整数値ひとつで管理することができる。
また、日時の表現は時代、宗教、文化によって異なるため、ミリ秒で管理することでそれらの差を吸収することができる。
そのため、古くから慣例的に、コンピューターでの時間管理はエポックからのミリ秒で行われてきた。
エポックからのミリ秒は、SystemクラスのcurrentTimeMillis()メソッドで取得できる。
また、CalendarクラスのgetTimeInMillis()メソッドや、DateクラスのgetTime()メソッドでも取得できる。
これらのメソッドで取得するミリ秒は、long型で返される。int型ではない理由は、ミリ秒という細かい数え方のため、int型の最大値を超えてしまうからである。
エポックからのミリ秒で日時を取得すると、日時の大小比較や、差の計算や増減、日時を扱うクラス間の変換を行うことができる。ただ、通常はCalendarクラスを用いれば問題ないだろう。
「エポック」とは「時代」という意味である。
つまり「1970/01/01 00:00:00.000」時点以降が「コンピューターの時代」となるわけである。
世界標準時の「1970/01/01 00:00:00.000」である。
多くのコンピューターは、内部時計による時間を、世界標準時の「1970/01/01 00:00:00.000」からの経過ミリ秒で管理する。
この、経過時間を数える「開始時点」となる「1970/01/01 00:00:00.000」を「エポック」と呼ぶ。
現在日時等、日時の管理は多くの場合このエポックからの「のべミリ秒」で行う。
エポックからのミリ秒で日時を管理することで、秒から分への繰り上がり等を気にする必要がなくなり、整数値ひとつで管理することができる。
また、日時の表現は時代、宗教、文化によって異なるため、ミリ秒で管理することでそれらの差を吸収することができる。
そのため、古くから慣例的に、コンピューターでの時間管理はエポックからのミリ秒で行われてきた。
エポックからのミリ秒は、SystemクラスのcurrentTimeMillis()メソッドで取得できる。
また、CalendarクラスのgetTimeInMillis()メソッドや、DateクラスのgetTime()メソッドでも取得できる。
これらのメソッドで取得するミリ秒は、long型で返される。int型ではない理由は、ミリ秒という細かい数え方のため、int型の最大値を超えてしまうからである。
エポックからのミリ秒で日時を取得すると、日時の大小比較や、差の計算や増減、日時を扱うクラス間の変換を行うことができる。ただ、通常はCalendarクラスを用いれば問題ないだろう。
「エポック」とは「時代」という意味である。
つまり「1970/01/01 00:00:00.000」時点以降が「コンピューターの時代」となるわけである。
// Sample.java
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class Sample
{
public static void main( String[] args )
{
// 現在の「エポックからのミリ秒」を取得します。
long l = System.currentTimeMillis();
System.out.println( l );
// 1267706219921
// 出力フォーマット。
// 「年/月/日 時:分:秒.ミリ秒」と出力します。
String format = "yyyy/MM/dd HH:mm:ss.SSS";
// 現在日時を格納したCalendarクラスのインスタンスを取得します。
Calendar now = Calendar.getInstance();
// この中に格納されている「エポックからのミリ秒」を取得します。
System.out.println( now.getTimeInMillis() );
// 1267706219953
System.out.println( new SimpleDateFormat( format ).format( now.getTime() ) );
// 2010/03/04 21:36:59.953
// このインスタンス内の現在日時をリセットすると、
// エポックの日時になります。
now.clear();
System.out.println( now.getTimeInMillis() );
// -32400000
System.out.println( new SimpleDateFormat( format ).format( now.getTime() ) );
// 1970/01/01 00:00:00.000
// 注:エポックからのミリ秒が「-32400000」なのは、
// 「日本標準時のエポック」にリセットしたからです。
// 世界標準時と日本標準時の時差9時間=32400000ミリ秒
// だけ、エポックからのミリ秒がずれています。
// このインスタンスに、最初にSystemクラスの
// currentTimeMillis()メソッドで取得したミリ秒を、
// セットします。
now.setTimeInMillis( l );
System.out.println( now.getTimeInMillis() );
// 1267706219921
System.out.println( new SimpleDateFormat( format ).format( now.getTime() ) );
// 2010/03/04 21:36:59.921
}
}
import java.util.Calendar;
import java.text.SimpleDateFormat;
public class Sample
{
public static void main( String[] args )
{
// 現在の「エポックからのミリ秒」を取得します。
long l = System.currentTimeMillis();
System.out.println( l );
// 1267706219921
// 出力フォーマット。
// 「年/月/日 時:分:秒.ミリ秒」と出力します。
String format = "yyyy/MM/dd HH:mm:ss.SSS";
// 現在日時を格納したCalendarクラスのインスタンスを取得します。
Calendar now = Calendar.getInstance();
// この中に格納されている「エポックからのミリ秒」を取得します。
System.out.println( now.getTimeInMillis() );
// 1267706219953
System.out.println( new SimpleDateFormat( format ).format( now.getTime() ) );
// 2010/03/04 21:36:59.953
// このインスタンス内の現在日時をリセットすると、
// エポックの日時になります。
now.clear();
System.out.println( now.getTimeInMillis() );
// -32400000
System.out.println( new SimpleDateFormat( format ).format( now.getTime() ) );
// 1970/01/01 00:00:00.000
// 注:エポックからのミリ秒が「-32400000」なのは、
// 「日本標準時のエポック」にリセットしたからです。
// 世界標準時と日本標準時の時差9時間=32400000ミリ秒
// だけ、エポックからのミリ秒がずれています。
// このインスタンスに、最初にSystemクラスの
// currentTimeMillis()メソッドで取得したミリ秒を、
// セットします。
now.setTimeInMillis( l );
System.out.println( now.getTimeInMillis() );
// 1267706219921
System.out.println( new SimpleDateFormat( format ).format( now.getTime() ) );
// 2010/03/04 21:36:59.921
}
}
// Sample.java import java.util.Calendar; import java.text.SimpleDateFormat; public class Sample { public static void main( String[] args ) { // 現在の「エポックからのミリ秒」を取得します。 long l = System.currentTimeMillis(); System.out.println( l ); // 1267706219921 // 出力フォーマット。 // 「年/月/日 時:分:秒.ミリ秒」と出力します。 String format = "yyyy/MM/dd HH:mm:ss.SSS"; // 現在日時を格納したCalendarクラスのインスタンスを取得します。 Calendar now = Calendar.getInstance(); // この中に格納されている「エポックからのミリ秒」を取得します。 System.out.println( now.getTimeInMillis() ); // 1267706219953 System.out.println( new SimpleDateFormat( format ).format( now.getTime() ) ); // 2010/03/04 21:36:59.953 // このインスタンス内の現在日時をリセットすると、 // エポックの日時になります。 now.clear(); System.out.println( now.getTimeInMillis() ); // -32400000 System.out.println( new SimpleDateFormat( format ).format( now.getTime() ) ); // 1970/01/01 00:00:00.000 // 注:エポックからのミリ秒が「-32400000」なのは、 // 「日本標準時のエポック」にリセットしたからです。 // 世界標準時と日本標準時の時差9時間=32400000ミリ秒 // だけ、エポックからのミリ秒がずれています。 // このインスタンスに、最初にSystemクラスの // currentTimeMillis()メソッドで取得したミリ秒を、 // セットします。 now.setTimeInMillis( l ); System.out.println( now.getTimeInMillis() ); // 1267706219921 System.out.println( new SimpleDateFormat( format ).format( now.getTime() ) ); // 2010/03/04 21:36:59.921 } }