← 記事に戻る
# ANA旅割計算の締め切り日表示するアプリを作ってみました。

[![](https://zip358.com/wp-content/uploads/2015/05/スクリーンショット-2015-05-04-11.09.08.png)](https://zip358.com/wp-content/uploads/2015/05/スクリーンショット-2015-05-04-11.09.08.png)ANA旅割計算の締め切り日表示するアプリを作ってみました。Android4.0以降ならすんなりと動くと思います。ただし実機で確認したところ、上記のような見栄えの良い感じではなかったです。カレンダーが表示されていなくて、SELECTバーでの選択表示でした。ちなみにアプリのコードも貼っときます。まだまだ、改良できそうなんですけどダサいコードだな、どうすれば短いコードになるだろうと思ってます。最初はボタンをクリックしないで動くようにコードを書いていたのですが、実機で確認したら、datepikerのイベントが発生したらalert画面が表示される事になってたのですが、操作性を考慮してButtonに切り替えました。あえて、datepikerのイベントで動くコードもコメントにして残してます。こんなしょぼいアプリを作るのに数時間費やしました。アルゴリズム的には出来るですが、未知の言語は辛いですAndroidのAPI機能が全然わからない感じです・・・・。リファレンスの本を買おうかな。。。 今回のアプリは上位機種のAndroidならそれなりの見栄えで表示されると思います。 DLはこちらから、 <https://zip358.com/tool/anatabiwari.apk>?\[v4.2~v4.4\] <https://zip358.com/tool/anatabiwari2.apk>\[v5~\] 改正版 追記:ウェブサービス (どちらもショボい(`・ω・´)) <http://zip358.com/tool/ANAmobile/>?\[mobile用\] [http://zip358.com/tool/ana\_calendar/](http://zip358.com/tool/ana_calendar/) \[PC用\] ```
package com.example.zip.myapplication4;
import android.content.DialogInterface;
import android.preference.DialogPreference;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.DatePicker;
import android.app.AlertDialog;
import android.widget.DatePicker.OnDateChangedListener;
import java.security.acl.Permission;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DatePicker datePicker1 = (DatePicker) findViewById(R.id.datePicker);
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        long time = cal.getTimeInMillis();
        datePicker1.setMinDate(time);
/*        datePicker1.init(Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH, new OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                String str = Integer.toString(year) +"/" + Integer.toString(monthOfYear + 1) + "/" + Integer.toString(dayOfMonth);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
                Date date = null;
                Date date1 = null;
                Calendar cal1 = Calendar.getInstance();
                Calendar cal2 = Calendar.getInstance();
                Calendar cal3 = Calendar.getInstance();
                Calendar cal4 = Calendar.getInstance();
                try {
                    date = sdf.parse(str);
                    cal1.setTime(date);
                    cal1.add(Calendar.DATE, -60);
                    cal2.setTime(date);
                    cal2.add(Calendar.DATE, -45);
                    cal3.setTime(date);
                    cal3.add(Calendar.DATE, -28);
                    cal4.setTime(date);
                    cal4.add(Calendar.DATE, -21);
                    new AlertDialog.Builder(MainActivity.this)
                            .setTitle("ANA旅割締め切り日")
                            .setMessage("旅割60締日"+ String.format("%2d月%2d日", cal1.get(Calendar.MONTH)+1, cal1.get(Calendar.DAY_OF_MONTH))+ "\n" +
                                            "旅割45締日"+ String.format("%2d月%2d日", cal2.get(Calendar.MONTH)+1, cal2.get(Calendar.DAY_OF_MONTH))+ "\n" +
                                            "旅割28締日"+ String.format("%2d月%2d日", cal3.get(Calendar.MONTH)+1, cal3.get(Calendar.DAY_OF_MONTH))+ "\n" +
                                            "旅割21締日"+ String.format("%2d月%2d日", cal4.get(Calendar.MONTH)+1, cal4.get(Calendar.DAY_OF_MONTH))+ "\n"
                            )
                            .setPositiveButton("閉じる", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                }
                            })
                            .show();
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
        });
*/
    }
    public void  anatabi(View v) throws ParseException {
        DatePicker datePicker1 = (DatePicker) findViewById(R.id.datePicker);
        String str = Integer.toString(datePicker1.getYear()) +"/" + Integer.toString(datePicker1.getMonth()+1) + "/" + Integer.toString(datePicker1.getDayOfMonth());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        Date date = null;
        Date date1 = null;
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        Calendar cal3 = Calendar.getInstance();
        Calendar cal4 = Calendar.getInstance();
        date = sdf.parse(str);
        cal1.setTime(date);
        cal1.add(Calendar.DATE, -60);
        cal2.setTime(date);
        cal2.add(Calendar.DATE, -45);
        cal3.setTime(date);
        cal3.add(Calendar.DATE, -28);
        cal4.setTime(date);
        cal4.add(Calendar.DATE, -21);
        new AlertDialog.Builder(MainActivity.this)
                .setTitle("ANA旅割締め切り日")
                .setMessage("旅割60締日" + String.format("%2d月%2d日", cal1.get(Calendar.MONTH) + 1, cal1.get(Calendar.DAY_OF_MONTH)) + "\n" +
                                "旅割45締日" + String.format("%2d月%2d日", cal2.get(Calendar.MONTH) + 1, cal2.get(Calendar.DAY_OF_MONTH)) + "\n" +
                                "旅割28締日" + String.format("%2d月%2d日", cal3.get(Calendar.MONTH) + 1, cal3.get(Calendar.DAY_OF_MONTH)) + "\n" +
                                "旅割21締日" + String.format("%2d月%2d日", cal4.get(Calendar.MONTH) + 1, cal4.get(Calendar.DAY_OF_MONTH)) + "\n"
                )
                .setPositiveButton("閉じる", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                })
                .show();
    }
}
```

 [ ![](https://zip358.com/wp-content/uploads/2026/01/image-32.png) 成功体験と成功の模倣.

 ](https://zip358.com/2026/02/05/%e6%88%90%e5%8a%9f%e4%bd%93%e9%a8%93%e3%81%a8%e6%88%90%e5%8a%9f%e3%81%ae%e6%a8%a1%e5%80%a3.html) 

 [ ![](https://zip358.com/wp-content/uploads/2026/01/image-31.png) サイトを分離した話を黙々と書いていきます.

 ](https://zip358.com/2026/02/04/%e3%82%b5%e3%82%a4%e3%83%88%e3%82%92%e5%88%86%e9%9b%a2%e3%81%97%e3%81%9f%e8%a9%b1%e3%82%92%e9%bb%99%e3%80%85%e3%81%a8%e6%9b%b8%e3%81%84%e3%81%a6%e3%81%84%e3%81%8d%e3%81%be%e3%81%99.html) 

 [ ![](https://zip358.com/wp-content/uploads/2026/01/image-30-300x300.png) 半額セールでアドビ様を延長.

 ](https://zip358.com/2026/02/03/%e5%8d%8a%e9%a1%8d%e3%82%bb%e3%83%bc%e3%83%ab%e3%81%a7%e3%82%a2%e3%83%89%e3%83%93%e6%a7%98%e3%82%92%e5%bb%b6%e9%95%b7.html) 

 [ ![](https://zip358.com/wp-content/uploads/2026/01/image-29.png) 何の前触れもなく変えたのは初めてかも.

 ](https://zip358.com/2026/02/02/%e4%bd%95%e3%81%ae%e5%89%8d%e8%a7%a6%e3%82%8c%e3%82%82%e3%81%aa%e3%81%8f%e5%a4%89%e3%81%88%e3%81%9f%e3%81%ae%e3%81%af%e5%88%9d%e3%82%81%e3%81%a6%e3%81%8b%e3%82%82.html) 

 [ ![](https://zip358.com/wp-content/uploads/2023/01/you-300x300.png) 跳ねたいサイトで跳ねたい

 ](https://zip358.com/2026/02/01/%e8%b7%b3%e3%81%ad%e3%81%9f%e3%81%84%e3%82%b5%e3%82%a4%e3%83%88%e3%81%a7%e8%b7%b3%e3%81%ad%e3%81%9f%e3%81%84.html)