选择开始结束日期的view

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

import android.app.DatePickerDialog;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.bjjw.cjgc.R;

public class SelectDateView extends LinearLayout {
    public interface OnButtonClickListener {
        /**
         * @param startDate        开始日期
         * @param endDate        结束日期
         */
        public void onOKClick(String startDate, String endDate);
        public void onCancelClick();
    }

    public interface OnStartDateClickListener {
        public void onStartDateClick();
    }

    public interface OnEndDateClickListener {
        public void onEndDateClick();
    }

    private OnButtonClickListener buttonClickListener = null;
    private OnStartDateClickListener onStartDateClickListener = null;
    private OnEndDateClickListener onEndDateClickListener = null;

    private Context context;

    private TextView selectDate;
    private TextView selectDateEnd;
    private Button commit;
    private Button cancel;
    // private int selectYear;
    // private int selectMonth;
    // private int selectDay;
    private DatePickerDialog datePicker;
    private DatePickerDialog datePickerEnd;

    private Date dateE;
    private Date dateS;
    private Date now;
    private Calendar calendar;
    private SimpleDateFormat sdf;

    private String startDate;
    private String endDate;

    private DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            // selectYear = year;
            // selectMonth = monthOfYear;
            // selectDay = dayOfMonth;

            dateS.setYear(year - 1900);
            dateS.setMonth(monthOfYear);
            dateS.setDate(dayOfMonth);

//            startDate = getDateString(year, monthOfYear, dayOfMonth);
//            selectDate.setText(startDate);

            calendar.set(year, monthOfYear, dayOfMonth);
            Date date = calendar.getTime();

            selectDate.setText(sdf.format(date));

            startDate = sdf.format(date);
        }
    };

    private DatePickerDialog.OnDateSetListener listenerEnd = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            // selectYear = year;
            // selectMonth = monthOfYear;
            // selectDay = dayOfMonth;

            dateE.setYear(year - 1900);
            dateE.setMonth(monthOfYear);
            dateE.setDate(dayOfMonth);

            calendar.set(year, monthOfYear, dayOfMonth);
            Date date = calendar.getTime();

            selectDateEnd.setText(sdf.format(date));

            calendar.add(Calendar.DAY_OF_YEAR, 1);
            date = calendar.getTime();
            endDate = sdf.format(date);
        }
    };

    public SelectDateView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    public SelectDateView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public SelectDateView(Context context) {
        super(context);
        init(context);
    }

    private void init(Context context) {
        this.context = context;
        View contentView = LayoutInflater.from(context).inflate(R.layout.select_date_view, this);

        selectDate = (TextView) contentView.findViewById(R.id.date);
        selectDateEnd = (TextView) contentView.findViewById(R.id.date_end);
        commit = (Button) contentView.findViewById(R.id.commit);
        cancel = (Button) contentView.findViewById(R.id.cancel);

        dateE = new Date();
        dateS = new Date();
        calendar = Calendar.getInstance();
        now = calendar.getTime();
        sdf = new SimpleDateFormat("yyyy-MM-dd");

        int selectYear = calendar.get(Calendar.YEAR);
        int selectMonth = calendar.get(Calendar.MONTH);
        int selectDay = calendar.get(Calendar.DAY_OF_MONTH);

        datePicker = new DatePickerDialog(context, listener,
                selectYear, selectMonth, selectDay);
        datePickerEnd = new DatePickerDialog(context, listenerEnd,
                selectYear, selectMonth, selectDay);

        String btnText = sdf.format(now);
        endDate = btnText;
        startDate = btnText;

        selectDate.setText(btnText);
        selectDate.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                datePicker.show();
                // 可以在下面的代码设置自定义的日期选择组件
//                if (null != onStartDateClickListener) {
//                    onStartDateClickListener.onStartDateClick();
//                }
            }
        });

        selectDateEnd.setText(btnText);
        selectDateEnd.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                datePickerEnd.show();
                // 可以在下面的代码设置自定义的日期选择组件
//                if (null != onEndDateClickListener) {
//                    onEndDateClickListener.onEndDateClick();
//                }
            }
        });

        commit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                errorSelect();
            }
        });

        cancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (null != buttonClickListener) {
                    buttonClickListener.onCancelClick();
                }
            }
        });
    }

    private String getDateString(int year, int month, int day) {
        return year + "-" + (month + 1) + "-" + day;
    }

    /**
     * 2014-09-12
     * 2014-09-28
     * 判断日期选择是否正确
     */
    private void errorSelect() {
        String text = "";
        String startError = "开始时间请选择不超过结束时间的日期";
        String endError = "结束时间请选择不超过今天的日期";

        try {
            dateE = new SimpleDateFormat("yyyy-MM-dd").parse(selectDateEnd.getText().toString());
            dateS = new SimpleDateFormat("yyyy-MM-dd").parse(selectDate.getText().toString());
        } catch (ParseException e) {
            Toast.makeText(context, "日期格式不正确", Toast.LENGTH_LONG).show();
            return;
        }

        if (dateE.compareTo(now) > 0) {
//            text = endError;
            text="";
        }

        if (dateS.compareTo(dateE) > 0) {
            if (!"".equals(text)) {
                text += ", " + startError;
            } else {
                text = startError;
            }
        }

        if (!"".equals(text)) {
            Toast.makeText(context, text, Toast.LENGTH_LONG).show();
        } else {
            if (null != buttonClickListener) {
                buttonClickListener.onOKClick(selectDate.getText().toString(), selectDateEnd.getText().toString());
            }
        }
    }

    public TextView getSelectDate() {
        return selectDate;
    }

    public TextView getSelectDateEnd() {
        return selectDateEnd;
    }

    public void setOnButtonClickListener(OnButtonClickListener buttonClickListener) {
        this.buttonClickListener = buttonClickListener;
    }

    public void setOnStartDateClickListener(
            OnStartDateClickListener onStartDateClickListener) {
        this.onStartDateClickListener = onStartDateClickListener;
    }

    public void setOnEndDateClickListener(
            OnEndDateClickListener onEndDateClickListener) {
        this.onEndDateClickListener = onEndDateClickListener;
    }
}
时间: 2024-10-29 19:12:13

选择开始结束日期的view的相关文章

jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)

使用jQuery ui首先需要引入jQuery类库,jQuery ui js脚本和jQuery ui css样式表.代码示例如下: <script src="js/jquery-1.7.1.js"></script> <script src="js/jquery-ui-1.8.18.custom.min.js"></script> <link rel="stylesheet" type=&qu

结束日期必须大于开始日期--My97DatePicker日历控制的又一方便之处

在做时间查询时,有时需要两个日期,从一个日期到另外一个日期的那种,但是这样会有一个问题,比如后者的结束日期晚于开始日期怎么办?用JS写验证,麻烦,呵呵,用这个日历控件,可方便实现结束日期只显示开始日期之后的日期,具体的参看以下效果图: 比如我选择开始日期是7月28,那结束的日期将只能从7月28日后面的日期里来选择,省去了我们JS验证结束日期小于开始日期的麻烦. 具体代码如下: 开始日期的input id = "startDate" 结束日期的input id = "endDa

my97datepicker开始日期小于结束日期格式化时间精确届时分秒

my97datepicker开始日期小于结束日期格式化时间精确到时分秒 一 , 需求: 结束时间 > 开始时间, 不符合的时间段不能选择.比如我选择开始日期是7月28,那结束的日期将只能从7月28日后面的日期里来选择,省去了我们JS验证结束日期小于开始日期的麻烦. 具体代码如下: 开始日期的input id = "startDate" 结束日期的input id = "endDate" 从: <input id="startDate"

确定指定年份季度的开始日期和结束日期

SQL代码如下: SELECT sn AS 季度, (sn - 1) * 3 + 1 AS 开始月份, ADD_MONTHS(TRUNC(TO_DATE(年, 'yyyy'), 'yy'), (sn - 1) * 3) AS 开始日期, ADD_MONTHS(TRUNC(TO_DATE(年, 'yyyy'), 'yy'), sn * 3) - 1 AS 结束日期 FROM (SELECT '2015' AS 年, LEVEL AS sn FROM DUAL CONNECT BY LEVEL <=

* 获取本周、本季度、本月、上月的开始日期、结束日期

/** * 获取本周.本季度.本月.上月的开始日期.结束日期 */ var now = new Date();                    //当前日期 var nowDayOfWeek = now.getDay();         //今天本周的第几天 var nowDay = now.getDate();              //当前日 var nowMonth = now.getMonth();           //当前月 var nowYear = now.getY

PHP获取一年有几周以及每周开始日期和结束日期

最近接了一个项目,其中有一需求是用php获取一年有几周以及每周开始日期和接触日期.在网上找些资料没有合适的,于是自己做了一份,下面通过两种方式实现PHP获取一年有几周以及每周开始日期和结束日期 代码一: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <?php header("Content-type:text/html;charset=utf-8"); date_default_timezone_set(&

php获取本周和上周的开始日期和结束日期

<?php header('Content-type: text/html; charset=utf-8'); $date=date('Y-m-d'); //当前日期 $first=1; //$first =1 表示每周星期一为开始日期 0表示每周日为开始日期 $w=date('w',strtotime($date)); //获取当前周的第几天 周日是 0 周一到周六是 1 - 6 $now_start=date('Y-m-d',strtotime("$date -".($w ?

C# 时间计算 今天、昨天、前天、明天 一个月的开始日期与结束日期

C# 时间计算 今天.昨天.前天.明天 class Program    {        static void Main(string[] args)        {            DateTime dt1=GetTodayZeroTime(DateTime.Now);            Console.WriteLine("今天零点:{0}",dt1.ToString() );            DateTime dt2 = GetYestodayZeroTim

WdatePicker开始日期不能大于结束日期

开始日期:<input class="startDate Wdate" id="startDate" type="text" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd',maxDate:'#F{$dp.$D(\'endDate\')}'})" /> 结束日期:<input class="endDate Wdate" id="endDate