Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Androidにおける日付処理の基本

Android開発のためのJavaSE再入門(7)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/01/05 14:00

 Androidアプリケーションは、Java言語を用いて開発できます。Androidアプリケーションの開発にあたっては、米グーグル社が提供するAndroid SDK(Software Development Kit、開発キット)の知識は当然ながら、基本となるのはJava SEです。この連載では、Javaでの開発の基礎となるJava SEを、実際にAndroid上で実行できるソースコードとともに解説します。

目次

はじめに

 最終回の本稿は、基本的なJava APIで、これまでとりあげていなかった日付や時間を操作するAPIを紹介します。

 なおAndroid SDKに含まれる基本APIは、現行のJava SE 6とまったく同じというわけではありません。API Levelが低いと、Java SE 6に含まれるクラスやメソッドの一部が実装されていない場合があります。

 API Levelの微妙な違いは、Android Developersサイトで確認するようにしてください。

対象読者

 Androidアプリケーションの開発を始めたい方で、JavaとEclipseのごく基本的な知識がある方を対象とします。

日付、時間処理の基本

 Javaで日付や時刻をあつかうための基本となるクラスは、java.util.Dateとjava.util.Calendarクラスです。

 java.util.Dateクラスは、特定の日付と時刻を保持するためのクラスです。保持する値は、エポックと呼ばれるグリニッジ標準時の1970年1月1日00:00:00から起算したミリ秒となっています。

 ただ現行のJavaでは、このクラスのメソッドを使うことはあまりありません。ほとんどのメソッドが非推奨となっており、通常は国際化に対応したjava.util.Calendarクラスや日付表示用のクラスを利用します。

 Calendarクラスは、さまざまな言語や地域の日付、時刻の変換機能に対応する抽象クラスです。異なる暦に対しても、共通のAPIが提供されています。

java.util.Calendarクラスの使い方

 Calendarオブジェクトは抽象クラスなので、インスタンスの生成はコンストラクタを使用せずに、getInstanceメソッドを使用します。getInstanceメソッドは、指定されたロケールまたはタイムゾーンに対応したCalendarオブジェクトを返します。ロケールとは、ある地域の国や言語といった情報のことです。

 引数がない場合は、現在のシステム時刻を示すデフォルトのCalendarオブジェクトが返されます。なおデフォルトのCalendarオブジェクトは、Calendarの具象サブクラスであるGregorianCalendarクラスのインスタンスとなっています。このクラスは、世界のほとんどの地域で使用される標準的なカレンダです。

 では、DateクラスとCalendarクラスを使って、現在日時を表示してみましょう。今回も、テキストビューを使って、文字を表示しています。

図1 現在日時の表示
図1 現在日時の表示

 ソースファイルは、次のようになっています。

リスト main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/parent"
    >
</LinearLayout>
リスト HelloAndroid.javaの一部
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    sample1();
}

// 文字列の1行表示
public void printString(String s) {
    // ベースのレイアウト取得
    LinearLayout parent = (LinearLayout) findViewById(R.id.parent);
    TextView tv = new TextView(this);
    tv.setTypeface(Typeface.MONOSPACE); // 等幅フォントの指定
    tv.setText(s);
    parent.addView(tv);                 // ビューの追加
}

public void sample1() {

    // Dateクラスによる現在時表示
    Date date = new Date();
    printString("Date: " + date.toString());

    // デフォルトのCalendarオブジェクト
    Calendar cal = Calendar.getInstance();

    // 実装クラス名表示
    printString(cal.getClass().getName());

    // Calendarクラスによる現在時表示
    String tmp = "Calendar: " + cal.get(Calendar.YEAR) + "/"
            + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DATE)
            + " " + cal.get(Calendar.HOUR_OF_DAY) + ":"
            + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND);
    printString(tmp);
}

 Dateクラスでは、toStringメソッドで、日時を文字列に変換できます。

 Calendarクラスでは、getメソッドにより日時の各値を取得して表示しています。getメソッドの引数には、日時のフィールドを示す定数を指定します。この定数は、Calendarクラスで定義されており、主な定数は以下のとおりです。

日時のフィールドを示す定数
定数名 説明
YEAR
MONTH
DATE、DAY_OF_MONTH 月の日
HOUR_OF_DAY 24時間制の時刻
AM_PM 午前か午後
HOUR 12時間制の時刻
MINUTE
SECOND
MILLISECOND ミリ秒
DAY_OF_WEEK 曜日

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 高江 賢(タカエ ケン)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:Android開発のためのJava SE再入門
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5