TimePickerView时间选择器,两个时间之间的简单运算
今天在看需求的时候,看到了选择时间的功能,然后我第一反应就想到了TimePickerView时间选择器,大佬封装的简直完美,大部分需求都是可以满足的,但是还有一些比较坑的需求,比如分钟只显示以10为单位的,我看了大佬的代码,没有找到,好像似乎没有这个功能,本来想着看能不能改下源码加下,真是人算不如天算,这个需求不要了!!!太好了……首先贴出大佬的githubhttps://github...
今天在看需求的时候,看到了选择时间的功能,然后我第一反应就想到了TimePickerView时间选择器,大佬封装的简直完美,大部分需求都是可以满足的,但是还有一些比较坑的需求,比如分钟只显示以10为单位的,我看了大佬的代码,没有找到,好像似乎没有这个功能,本来想着看能不能改下源码加下,真是人算不如天算,这个需求不要了!!!太好了……
首先贴出大佬的github
https://github.com/Bigkoo/Android-PickerView
一、使用TimePickerView
接下来就是我的使用,以及两个时间之间的简单运算了,
首先我们需要导入依赖,
compile 'com.contrarywind:Android-PickerView:3.2.7'
你可以选择使用最新的版本,我的这个并不是最新的。
如果需要改源码的话,那就只能下载大佬的demo,然后导入module了。
然后我们同步一下就行了。
使用起来也是非常的简单
TimePickerView timePickerView = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
String start = getTime(date);
startDate.setText(start);
}
}).setType(new boolean[]{true, true, true, true, true, false})
.setCancelColor(getResources().getColor(R.color.c1))
.setSubmitColor(getResources().getColor(R.color.c1)).build();
//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。
timePickerView.setDate(Calendar.getInstance());
timePickerView.show();
这里需要注意的就是getTime这个方法,
private String getTime(Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return format.format(date);
}
这个方法是根据自己项目的需求来定的,比如说你只需要年月日yyyy-MM-dd,就只需要这个就行,
这个就是简单的使用,怎么样,简单吧,当然还有一些自定义的属性:
.setType(new boolean[]{true, true, true, true, true, true})// 默认全部显示
.setCancelText("Cancel")//取消按钮文字
.setSubmitText("Sure")//确认按钮文字
.setContentSize(18)//滚轮文字大小
.setTitleSize(20)//标题文字大小
.setTitleText("Title")//标题文字
.setOutSideCancelable(false)//点击屏幕,点在控件外部范围时,是否取消显示
.isCyclic(true)//是否循环滚动
.setTitleColor(Color.BLACK)//标题文字颜色
.setSubmitColor(Color.BLUE)//确定按钮文字颜色
.setCancelColor(Color.BLUE)//取消按钮文字颜色
.setTitleBgColor(0xFF666666)//标题背景颜色 Night mode
.setBgColor(0xFF333333)//滚轮背景颜色 Night mode
.setDate(selectedDate)// 如果不设置的话,默认是系统时间*/
.setRangDate(startDate,endDate)//起始终止年月日设定
.setLabel("年","月","日","时","分","秒")//默认设置为年月日时分秒
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
.isDialog(true)//是否显示为对话框样式
这里注意的就是new boolean[]{true, true, true, true, true, true}这个,就是控制年月日时分秒的,不要那个就false就行了,
好了,这样就算真的完了,就可以正常使用了。
二、两个时间的简单运算
1、获取当前的时间:
public static String getNowTime() {
String timeString = null;
Time time = new Time();
time.setToNow();
String year = thanTen(time.year);
String month = thanTen(time.month + 1);
String monthDay = thanTen(time.monthDay);
String hour = thanTen(time.hour);
String minute = thanTen(time.minute);
timeString = year + "-" + month + "-" + monthDay/* + " " + hour + ":" + minute*/;
// System.out.println("-------timeString----------" + timeString);
return timeString;
}
十一下加零:(thanTen方法)
public static String thanTen(int str) {
String string = null;
if (str < 10) {
string = "0" + str;
} else {
string = "" + str;
}
return string;
}
2、计算时间差:
public static String getTimeDifference(String starTime, String endTime) {
String timeString = "";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Date parse = dateFormat.parse(starTime);
Date parse1 = dateFormat.parse(endTime);
long diff = parse1.getTime() - parse.getTime();
long day = diff / (24 * 60 * 60 * 1000);
long hour = (diff / (60 * 60 * 1000) - day * 24);
long min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
long s = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
long ms = (diff - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000
- min * 60 * 1000 - s * 1000);
// System.out.println(day + "天" + hour + "小时" + min + "分" + s +
// "秒");
long hour1 = diff / (60 * 60 * 1000);
String hourString = hour1 + "";
long min1 = ((diff / (60 * 1000)) - hour1 * 60);
timeString = day + "天"+ hour + "小时" + min + "分";
// System.out.println(day + "天" + hour + "小时" + min + "分" + s +
// "秒");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return timeString;
}
3、与当前时间比早晚:
public static boolean compareNowTime(String time) {
boolean isDayu = false;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date parse = dateFormat.parse(time);
Date parse1 = dateFormat.parse(getNowTime());
long diff = parse1.getTime() - parse.getTime();
if (diff < 0) {
isDayu = true;
} else {
isDayu = false;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isDayu;
}
哎,算了,太懒了,不一个一个的粘了,直接把类粘出来吧……
public class TimeUtil {
private SimpleDateFormat sf = null;
/**
* 获取当前时间
*
* @return
*/
public static String getNowTime() {
String timeString = null;
Time time = new Time();
time.setToNow();
String year = thanTen(time.year);
String month = thanTen(time.month + 1);
String monthDay = thanTen(time.monthDay);
String hour = thanTen(time.hour);
String minute = thanTen(time.minute);
timeString = year + "-" + month + "-" + monthDay/* + " " + hour + ":" + minute*/;
// System.out.println("-------timeString----------" + timeString);
return timeString;
}
/**
* 获取到分
* @return
*/
public static String getNowTime1() {
String timeString = null;
Time time = new Time();
time.setToNow();
String year = thanTen(time.year);
String month = thanTen(time.month + 1);
String monthDay = thanTen(time.monthDay);
String hour = thanTen(time.hour);
String minute = thanTen(time.minute);
timeString = year + "-" + month + "-" + monthDay + " " + hour + ":" + minute;
// System.out.println("-------timeString----------" + timeString);
return timeString;
}
public int calculate(int year, int month) {
boolean yearleap = judge(year);
int day;
if (yearleap && month == 2) {
day = 29;
} else if (!yearleap && month == 2) {
day = 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
day = 30;
} else {
day = 31;
}
return day;
}
public boolean judge(int year) {
boolean yearleap = (year % 400 == 0) || (year % 4 == 0)
&& (year % 100 != 0);// 采用布尔数据计算判断是否能整除
return yearleap;
}
/**
* 十一下加零
*
* @param str
* @return
*/
public static String thanTen(int str) {
String string = null;
if (str < 10) {
string = "0" + str;
} else {
string = "" + str;
}
return string;
}
/**
* 计算时间差
*
* @param starTime 开始时间
* @param endTime 结束时间
* @param
* @return 返回时间差
*/
public static String getTimeDifference(String starTime, String endTime) {
String timeString = "";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Date parse = dateFormat.parse(starTime);
Date parse1 = dateFormat.parse(endTime);
long diff = parse1.getTime() - parse.getTime();
long day = diff / (24 * 60 * 60 * 1000);
long hour = (diff / (60 * 60 * 1000) - day * 24);
long min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
long s = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
long ms = (diff - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000
- min * 60 * 1000 - s * 1000);
// System.out.println(day + "天" + hour + "小时" + min + "分" + s +
// "秒");
long hour1 = diff / (60 * 60 * 1000);
String hourString = hour1 + "";
long min1 = ((diff / (60 * 1000)) - hour1 * 60);
// timeString = hour1 + "小时" + min1 + "分";
if(min>0||hour>0||day>0){
if(hour<=4){
if(hour==4 && min>0){
timeString = day+1 + "天"+ hour + "小时" + min + "分";
}else{
timeString = day+0.5 + "天"+ hour + "小时" + min + "分";
}
}else if(hour<=8 && hour>4){
timeString = day+1 + "天"+ hour + "小时" + min + "分";
}else if(hour>8){
timeString = day+1 + "天"+ hour + "小时" + min + "分";
}
}else{
timeString = day + "天"+ hour + "小时" + min + "分";
}
// System.out.println(day + "天" + hour + "小时" + min + "分" + s +
// "秒");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return timeString;
}
/**
* 计算相差的小时(返回小时)
*
* @param starTime
* @param endTime
* @return
*/
public static String getTimeDifferenceHour(String starTime, String endTime) {
String timeString = "";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Date parse = dateFormat.parse(starTime);
Date parse1 = dateFormat.parse(endTime);
long diff = parse1.getTime() - parse.getTime();
String string = Long.toString(diff);
float parseFloat = Float.parseFloat(string);
float hour1 = parseFloat / (60 * 60 * 1000);
timeString = Float.toString(hour1);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return timeString;
}
/**
* 获取时间中的某一个时间点
*
* @param str
* @param type
* @return
*/
public String getJsonParseShiJian(String str, int type) {
String shijanString = null;
String nian = str.substring(0, str.indexOf("-"));
String yue = str.substring(str.indexOf("-") + 1, str.lastIndexOf("-"));
String tian = str.substring(str.lastIndexOf("-") + 1, str.indexOf(" "));
String shi = str.substring(str.indexOf(" ") + 1, str.lastIndexOf(":"));
String fen = str.substring(str.lastIndexOf(":") + 1, str.length());
switch (type) {
case 1:
shijanString = nian;
break;
case 2:
shijanString = yue;
break;
case 3:
shijanString = tian;
break;
case 4:
shijanString = shi;
break;
case 5:
shijanString = fen;
break;
}
return shijanString;
}
/**
* Sring变int
*
* @param str
* @return
*/
public int strToInt(String str) {
int value = 0;
value = Integer.parseInt(str);
return value;
}
/**
* 与当前时间比较早晚
*
* @param time 需要比较的时间
* @return 输入的时间比现在时间晚则返回true
*/
public static boolean compareNowTime(String time) {
boolean isDayu = false;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date parse = dateFormat.parse(time);
Date parse1 = dateFormat.parse(getNowTime());
long diff = parse1.getTime() - parse.getTime();
if (diff < 0) {
isDayu = true;
} else {
isDayu = false;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isDayu;
}
/**
* 判断是否大于当前时间(到分)
* @param time
* @return
*/
public static boolean compareNowTime1(String time) {
boolean isDayu = false;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Date parse = dateFormat.parse(time);
Date parse1 = dateFormat.parse(getNowTime1());
long diff = parse1.getTime() - parse.getTime();
if (diff <= 0) {
isDayu = true;
} else {
isDayu = false;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isDayu;
}
/**
* 把时间戳变yyyy-MM-dd HH:mm格式时间
*
* @param time
* @return
*/
public String getDateToString(long time) {
Date d = new Date(time);
sf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return sf.format(d);
}
/**
* 返回时间戳
*
* @param time
* @return
*/
public long dataOne(String time) {
SimpleDateFormat sdr = new SimpleDateFormat("yyyy-MM-dd HH:mm",
Locale.CHINA);
Date date;
long l = 0;
try {
date = sdr.parse(time);
l = date.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return l;
}
/**
* 比较两个时间
*
* @param starTime 开始时间
* @param endString 结束时间
* @return 结束时间大于开始时间返回true,否则反之֮
*/
public static boolean compareTwoTime(String starTime, String endString) {
boolean isDayu = false;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date parse = dateFormat.parse(starTime);
Date parse1 = dateFormat.parse(endString);
long diff = parse1.getTime() - parse.getTime();
if (diff >= 0) {
isDayu = true;
} else {
isDayu = false;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isDayu;
}
public static boolean compareTwoTime2(String starTime, String endString) {
boolean isDayu = false;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Date parse = dateFormat.parse(starTime);
Date parse1 = dateFormat.parse(endString);
long diff = parse1.getTime() - parse.getTime();
if (diff >= 0) {
isDayu = true;
} else {
isDayu = false;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isDayu;
}
/**
* 获取年
*
* @param time
* @return
*/
public String getTimeYear(String time) {
String substring = time.substring(0, time.lastIndexOf(" "));
return substring;
}
/**
* 换算小时,0.5小时-->0小时30分
*
* @param hour
* @return
*/
private String convertTime(String hour) {
String substring = hour.substring(0, hour.lastIndexOf("."));
String substring2 = hour.substring(hour.lastIndexOf(".") + 1,
hour.length());
substring2 = "0." + substring2;
float f2 = Float.parseFloat(substring2);
f2 = f2 * 60;
String string = Float.toString(f2);
String min = string.substring(0, string.lastIndexOf("."));
return substring + "小时" + min + "分";
}
}
这个类里面还有好多计算时间的方法,你们可以看看有没有需要的。
好了,终于写完了
下班喽
补充一下,以上的时间转换都是获取当前时间,下面这个是你获取后台返给你的时间,进行获取月日。
后台返给你的类型一定要和你写的类型对上。
TextView viewById = findViewById(R.id.tv_rq); String s = viewById.getText().toString(); Date date = null; //这个类型就是我们后台返回的,所以我就用这个了 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { date = sdf.parse(s); //这个是我需要的样式, sdf = new SimpleDateFormat("MM.dd"); aa = sdf.format(date); } catch (ParseException e) { System.out.println(e.getMessage()); } viewById.setText(aa);
简单demo功能
更多推荐
所有评论(0)