时间选择器便捷年月日时分秒

package com.shanzhou.appmodel.view.activity;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.text.Editable;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.TimePicker;

import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.OnTimeSelectChangeListener;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
import com.bigkoo.pickerview.view.TimePickerView;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.model.Response;
import com.shanzhou.appmodel.R;
import com.shanzhou.appmodel.callback.TextWatcherListener;
import com.shanzhou.appmodel.http.BaseBean;
import com.shanzhou.appmodel.http.UnEncryptionCallback;
import com.shanzhou.appmodel.http.Url;
import com.shanzhou.appmodel.utils.TextUtil;
import com.shanzhou.appmodel.view.base.BaseActivity;
import com.shanzhou.appmodel.widget.LoadingDialog;

import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

import static com.shanzhou.appmodel.utils.Constant.PUBLISH_RESULTCODE;

/**
 * @ClassName: PublishActivity
 * @Description: 发布页面
 * @Author: YangKuan
 * @Date: 2019/3/27 11:06
 */
public class AddActivity extends BaseActivity {
    private int mYear;
    private int mMonth;
    private int mDay;
    private int mYea;
    private int mMont;
    private TimePickerView pvTime;
    private int mDa;
    String  log;
    Calendar calendar = Calendar.getInstance(Locale.CHINA);


    @BindView(R.id.btn_back)
    ImageButton btnBack;//返回按钮
    @BindView(R.id.tv_title)
    TextView tvTitle;//标题
    @BindView(R.id.tv_submit)
    TextView tvSubmit;//提交
    @BindView(R.id.et_name)
    EditText etName;//名称
    @BindView(R.id.et_link)
    EditText etLink;//连接
    @BindView(R.id.et_total)
    EditText etTotal;//总数
    @BindView(R.id.et_finish)
    EditText etFinish;//完成数
    @BindView(R.id.et_instruction)
    EditText etInstruction;//说明
    @BindView(R.id.et_remarks)
    EditText etRemarks;//备注
    @BindView(R.id.start_time)
    TextView start_time;//开始时间
    @BindView(R.id.st_time)
    TextView st1_time;
    boolean flag=true;
    boolean ischeck=true;


    private LoadingDialog loadingDialog;//加载弹窗
    private String httpUrl = "";//网络请求连接

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        ButterKnife.bind(this);


    }

    @Override
    public void initView() {
        initTimePicker();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// HH:mm:ss
//获取当前时间
        Date date = new Date(System.currentTimeMillis());
          log=simpleDateFormat.format(date);
        Calendar ca = Calendar.getInstance();
        mYear = ca.get(Calendar.YEAR);
        mMonth = ca.get(Calendar.MONTH);
        mDay = ca.get(Calendar.DAY_OF_MONTH);
        mYea = ca.get(Calendar.YEAR);
        mMont = ca.get(Calendar.MONTH);
        mDa = ca.get(Calendar.DAY_OF_MONTH);
        loadingDialog = new LoadingDialog(this);
        tvTitle.setTextColor(getColour(R.color.c_333333));
        btnBack.setImageResource(R.drawable.ic_arrow_back_black);
        start_time.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              /*  flag=true;
                new DatePickerDialog(AddActivity.this, onDateSetListener, mYear, mMonth, mDay).show();*/
                if (pvTime != null) {
                    flag=true;
                    pvTime.show(view);//弹出时间选择器,传递参数过去,回调的时候则能够绑定此view
                }

            }

        });
        st1_time.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (pvTime != null) {
                    flag=false;
                    pvTime.show(view);//弹出时间选择器,传递参数过去,回调的时候则能够绑定此view
                }
             /*   flag=false;
                new DatePickerDialog(AddActivity.this, onDateSetListener, mYear, mMonth, mDay).show();*/

            }

        });
        tvTitle.setText("发布");
        tvSubmit.setVisibility(View.VISIBLE);

        Bundle bundle = getBundle();
        if (bundle != null) {
            int num = bundle.getInt("pageNum");
            if (num == 0) {
                httpUrl = Url.urlPublish;
            } else {
                httpUrl = Url.getPublishUrl(num);
            }
        }

    }

    private void initTimePicker() {

        pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {
                if (flag){
                    Log.d("news","true");
                    start_time.setText(getTime(date));
                }
                else {
                    Log.d("newse","e");
                    st1_time.setText(getTime(date));
                }
           /*     start_time.setText(getTime(date));*/
                Log.i("pvTime", "onTimeSelect");

            }
        })
                .setTimeSelectChangeListener(new OnTimeSelectChangeListener() {
                    @Override
                    public void onTimeSelectChanged(Date date) {
                        Log.i("pvTime", "onTimeSelectChanged");
                    }
                })
                .setType(new boolean[]{true, true, true, true, true, true})
                .isDialog(true) //默认设置false ,内部实现将DecorView 做为它的父控件。
                .build();

        Dialog mDialog = pvTime.getDialog();
        if (mDialog != null) {

            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    Gravity.BOTTOM);

            params.leftMargin = 0;
            params.rightMargin = 0;
            pvTime.getDialogContainerLayout().setLayoutParams(params);

            Window dialogWindow = mDialog.getWindow();
            if (dialogWindow != null) {
                dialogWindow.setWindowAnimations(com.bigkoo.pickerview.R.style.picker_view_slide_anim);//修改动画样式
                dialogWindow.setGravity(Gravity.BOTTOM);//改为Bottom,底部显示
            }
        }
    }
    private String getTime(Date date) {//可根据须要自行截取数据显示
        Log.d("getTime()", "choice date millis: " + date.getTime());
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return format.format(date);
    }
    /**
     * 日期选择器对话框监听
     */
    private DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;
            String days;
            if (mMonth + 1 < 10) {
                if (mDay < 10) {
                        days = new StringBuffer().append(mYear).append("-").append("0").
                                append(mMonth + 1).append("-").append("0").append(mDay).append("").toString();

                } else {
                    days = new StringBuffer().append(mYear).append("-").append("0").
                            append(mMonth + 1).append("-").append(mDay).append("").toString();
                }
            } else {
                if (mDay < 10) {
                    days = new StringBuffer().append(mYear).append("-").
                            append(mMonth + 1).append("-").append("0").append(mDay).append("").toString();
                } else {
                    days = new StringBuffer().append(mYear).append("-").
                            append(mMonth + 1).append("-").append(mDay).append("").toString();
                }

            }
            if (flag){
                Log.d("news","true");
                start_time.setText(days);
            }
            else {
                Log.d("newse","e");
                st1_time.setText(days);
            }



        }
    };

    @Override
    public void setListener() {
        etTotal.addTextChangedListener(new TextWatcherListener() {
            @Override
            public void afterTextChanged(Editable s) {
                String finishNumStr = etFinish.getText().toString();
                if (!TextUtil.isEmpty(finishNumStr)) {
                    int finishNum = Integer.parseInt(finishNumStr);
                    if (!TextUtil.isEmpty(s)) {
                        int totalNum = Integer.parseInt(s.toString());
                        if (totalNum < finishNum) {
                            showToast("完成数不能超过总数量!");
                        }
                    }
                }
            }
        });
        etFinish.addTextChangedListener(new TextWatcherListener() {
            @Override
            public void afterTextChanged(Editable s) {
                String totalNumStr = etTotal.getText().toString();
                if (!TextUtil.isEmpty(totalNumStr)) {
                    int totalNum = Integer.parseInt(totalNumStr);
                    if (!TextUtil.isEmpty(s)) {
                        int finishNum = Integer.parseInt(s.toString());
                        if (totalNum < finishNum) {
                            showToast("完成数不能超过总数量!");
                        }
                    }
                }
            }
        });
    }

    @OnClick({R.id.btn_back, R.id.tv_submit})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_back:
                //返回
                finish();
                break;
            case R.id.tv_submit:
                //提交

                String nameStr = etName.getText().toString();//名称
                String linkStr = etLink.getText().toString();//连接
                String totalStr = etTotal.getText().toString();//总数
                String finishStr = etFinish.getText().toString();//完成数
                String instructionStr = etInstruction.getText().toString();//说明
                String remarksStr = etRemarks.getText().toString();//备注
                String  endtimeStr=start_time.getText().toString();
                String log=st1_time.getText().toString();
                if (TextUtil.isEmpty(nameStr)) {
                    showToast("请输入名称");
                    break;
                }
                if (TextUtil.isEmpty(endtimeStr)) {
                    showToast("请输入截止时间");
                    break;
                }

                if (TextUtil.isEmpty(linkStr)) {
                    showToast("请输入连接");
                    break;
                }

                if (TextUtil.isEmpty(totalStr)) {
                    showToast("请输入总数");
                    break;
                }

                if (TextUtil.isEmpty(finishStr)) {
                    showToast("请输入完成数");
                    break;
                }

                if (Integer.parseInt(totalStr) < Integer.parseInt(finishStr)) {
                    showToast("完成数不能超过总数量!");
                    break;
                }

                if (TextUtil.isEmpty(instructionStr)) {
                    showToast("请输入说明");
                    break;
                }

                if (TextUtil.isEmpty(remarksStr)) {
                    showToast("请输入备注");
                    break;
                }

                publishData(nameStr, linkStr, totalStr, instructionStr, finishStr, remarksStr,endtimeStr,log);
                break;
            default:
                break;
        }
    }
    /**
     * 发布
     */
    private void publishData(String name, String link, String total, String instruction, String finish, String remarks,String endtime,String log) {
        if (loadingDialog != null && !loadingDialog.isShowing()) {
            loadingDialog.show();
        }
        OkGo.<String>post(httpUrl)
                .params("webname", name)//名称
                .params("linkurl", link)//连接
                .params("number", total)//总数量
                .params("intro", instruction)//说明
                .params("finish", finish)//完成数(完成数不能小于总数)
                .params("way", remarks)//备注
                .params("endtime", endtime)//截止时间
                .params("addtime", log)//截止时间

                .execute(new UnEncryptionCallback<BaseBean>() {
                    @Override
                    public void error(Response<String> response) {
                        showToast(getString(R.string.server_error));
                        if (loadingDialog != null && loadingDialog.isShowing()) {
                            loadingDialog.dismiss();
                        }
                    }

                    @Override
                    public void response(BaseBean bean, int stateCode, String message, long timeDifference) {
                        if (loadingDialog != null && loadingDialog.isShowing()) {
                            loadingDialog.dismiss();
                        }
                        if (stateCode == 1) {
                            setResult(PUBLISH_RESULTCODE);
                            finish();
                        }
                        showToast(message);
                    }
                });
    }

    /**
     * 时间选择
     *
     * @param activity
     * @param themeResId
     * @param tv
     * @param calendar
     */
    public static void showTimePickerDialog(Activity activity, int themeResId, final TextView tv, Calendar calendar) {
        // Calendar c = Calendar.getInstance();
        // 建立一个TimePickerDialog实例,并把它显示出来
        // 解释一哈,Activity是context的子类
        new TimePickerDialog(activity, themeResId,
                // 绑定监听器
                new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                        tv.setText(hourOfDay + ":" + minute + "");
                        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        String tv = formatter.format(new Date());
                    }
                }
                // 设置初始时间
                , calendar.get(Calendar.HOUR_OF_DAY)
                , calendar.get(Calendar.MINUTE)
                // true表示采用24小时制
                , true).show();
    }
  /*  @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.end_time:
                kktp(true);
            break;
            case R.id.st1_time:
                kktp(false);
                break;
        }

    }

    private void kktp(boolean ischeck) {
        Log.d("name", String.valueOf(ischeck));
    if (ischeck){
            Log.d("news1","true");
            showTimePickerDialog(this, 4, end_time, calendar);
        }
        else {
            Log.d("newse2","e");
            showTimePickerDialog(this, 4, st_time, calendar);
        }
    }*/

}
代码中包含两个时间选择器 一个是PickerView 一个是原生自带,都比较简单,
implementation 'com.contrarywind:Android-PickerView:4.1.6'