Android日時選択コントロール


Android日時選択コントロール、直接コード:
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.util.Log;
import android.view.View;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TimePicker;

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


/**
 *              : private EditText inputDate;//               private String
 * initDateTime="2012 9 3  14:44",//                :
 * inputDate.setOnClickListener(new OnClickListener() {
 *
 * @author
 * @Override public void onClick(View v) { DateTimePickDialogUtil
 * dateTimePicKDialog=new
 * DateTimePickDialogUtil(SinvestigateActivity.this,initDateTime);
 * dateTimePicKDialog.dateTimePicKDialog(inputDate);
 * <p/>
 * } });
 */
@SuppressLint("SimpleDateFormat")
//public class DateTimePickDialogUtil implements OnDateChangedListener, OnTimeChangedListener {
public class DateTimePickDialogUtil implements OnDateChangedListener {
    private DatePicker datePicker;
    private TimePicker timePicker;
    private AlertDialog ad;
    private String dateTime;
    private String initDateTime;
    private Activity activity;

    /**
     *              
     *
     * @param activity     :    activity
     * @param initDateTime        ,                 
     */
    public DateTimePickDialogUtil(Activity activity, String initDateTime) {
        this.activity = activity;
        this.initDateTime = initDateTime;
    }

    public void init(DatePicker datePicker) {
        Calendar calendar = Calendar.getInstance();
        if (!(null == initDateTime || "".equals(initDateTime))) {
            calendar = this.getCalendarByInintData(initDateTime, 1);
        } else {
            initDateTime = calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH) + "-" + calendar.get(Calendar.DAY_OF_MONTH);
        }
        datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this);
    }

    /**
     *            
     *
     * @param inputDate :               
     * @return
     */
    public AlertDialog dateTimePicKDialog(final TextView inputDate, String strStart, String strEnd) {
        long maxDate = 0;
        long minDate = 0;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date startDate = sdf.parse(strStart);
            Date endDate = sdf.parse(strEnd);
            maxDate = endDate.getTime();
            minDate = startDate.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        LinearLayout dateTimeLayout = (LinearLayout) activity.getLayoutInflater().inflate(R.layout.common_datetime, null);
        datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);
        datePicker.setMaxDate(maxDate);
        datePicker.setMinDate(minDate);
        timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);
        timePicker.setVisibility(View.GONE);
        init(datePicker);

        ad = new AlertDialog.Builder(activity)
                .setTitle(initDateTime)
                .setView(dateTimeLayout)
                .setPositiveButton("  ", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        inputDate.setText(dateTime);
//                        inputDate.setText(getOneDay(dateTime));
                    }
                })
                .setNegativeButton("  ", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        inputDate.setText("   ");
                    }
                }).show();
        onDateChanged(datePicker, 0, 0, 0);
        return ad;
    }

    private String getOneDay(String s) {
        try {
            String sss = "2015-12-25 17:23:00";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date after = sdf.parse(sss);
            long afterDate = after.getTime() - System.currentTimeMillis();
            return afterDate + "";
        } catch (Exception e) {
            Log.e("e--", e.toString());
        }
        return s;
    }

    public AlertDialog dateTimePicKDialog(final TextView inputDate) {
        LinearLayout dateTimeLayout = (LinearLayout) activity.getLayoutInflater().inflate(R.layout.common_datetime, null);
        datePicker = (DatePicker) dateTimeLayout.findViewById(R.id.datepicker);
        timePicker = (TimePicker) dateTimeLayout.findViewById(R.id.timepicker);
        timePicker.setVisibility(View.GONE);
        init(datePicker);

        ad = new AlertDialog.Builder(activity)
                .setTitle(initDateTime)
                .setView(dateTimeLayout)
                .setPositiveButton("  ", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        inputDate.setText(dateTime);
                    }
                })
                .setNegativeButton("  ", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        inputDate.setText("   ");
                    }
                }).show();

        onDateChanged(datePicker, 0, 0, 0);
        return ad;
    }

    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
        onDateChanged(null, 0, 0, 0);
    }

    @Override
    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        //       
        Calendar calendar = Calendar.getInstance();
        calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        dateTime = sdf.format(calendar.getTime());
        ad.setTitle(dateTime);
    }

    /**
     *          2012 07 02          ,    calendar
     *
     * @param initDateTime             
     * @return Calendar
     */
    private Calendar getCalendarByInintData(String initDateTime, int state) {
        Log.e("yearStr", initDateTime + state);
        Calendar calendar = Calendar.getInstance();
        //        2012 07 02  16:45               
        String date = spliteString(initDateTime, " ", "index", "front"); //   
        String time = spliteString(initDateTime, " ", "index", "back"); //   
        String yearStr = spliteString(date, "-", "index", "front"); //   
        String monthAndDay = spliteString(date, "-", "index", "back"); //   
        String monthStr = spliteString(monthAndDay, "-", "index", "front"); //  
        String dayStr = spliteString(monthAndDay, "-", "index", "back"); //  
        Log.e("yearStr", yearStr + dayStr);
        int currentYear = Integer.valueOf(yearStr.trim()).intValue();
        int currentMonth = Integer.valueOf(monthStr.trim()).intValue() - 1;
        int currentDay = Integer.valueOf(dayStr.trim()).intValue();
        calendar.set(currentYear, currentMonth, currentDay);
        return calendar;
    }

    /**
     *     
     *
     * @param srcStr        
     * @param pattern         
     * @param indexOrLast
     * @param frontOrBack
     * @return
     */
    public static String spliteString(String srcStr, String pattern, String indexOrLast, String frontOrBack) {
        String result = "";
        int loc = -1;
        if (indexOrLast.equalsIgnoreCase("index")) {
            loc = srcStr.indexOf(pattern); //              
        } else {
            loc = srcStr.lastIndexOf(pattern); //           
        }
        if (frontOrBack.equalsIgnoreCase("front")) {
            if (loc != -1)
                result = srcStr.substring(0, loc); //     
        } else {
            if (loc != -1)
                result = srcStr.substring(loc + 1, srcStr.length()); //     
        }
        return result;
    }
}

使用方法:
DateTimePickDialogUtil dataTimeUtil = new DateTimePickDialogUtil(this, null);
dataTimeUtil.dateTimePicKDialog(tvPsInfo, getStartDate(), useEndDate).show();