SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Android開発のためのJava SE再入門

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

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

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

 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 曜日

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
SimpleDateFormatクラス

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Android開発のためのJava SE再入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6343 2012/01/05 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング