目前项目中遇到时间转换,在网上搜了一遍,并没有找到合适的,所以就记录一下,以备不时之需,纯属笔记(非博客),大神路过。
/**
* 格式化时间
* 判断一个日期是否是今天或者昨天或者明天
* @param time 2017-04-28 15:41
* @return
*/
public static String formatDateTime(String time) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
if (time == null || "".equals(time)) {
return "";
}
Date date = null;
try {
date = format.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar current = Calendar.getInstance();
Calendar today = Calendar.getInstance(); // 今天
today.set(Calendar.YEAR, current.get(Calendar.YEAR));
today.set(Calendar.MONTH, current.get(Calendar.MONTH));
today.set(Calendar.DAY_OF_MONTH, current.get(Calendar.DAY_OF_MONTH));
// Calendar.HOUR——12小时制的小时数 Calendar.HOUR_OF_DAY——24小时制的小时数
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
Calendar yesterday = Calendar.getInstance(); // 昨天
yesterday.set(Calendar.YEAR, current.get(Calendar.YEAR));
yesterday.set(Calendar.MONTH, current.get(Calendar.MONTH));
yesterday.set(Calendar.DAY_OF_MONTH,
current.get(Calendar.DAY_OF_MONTH) - 1);
yesterday.set(Calendar.HOUR_OF_DAY, 0);
yesterday.set(Calendar.MINUTE, 0);
yesterday.set(Calendar.SECOND, 0);
Calendar tomorrow = Calendar.getInstance(); // 明天
tomorrow.set(Calendar.YEAR, current.get(Calendar.YEAR));
tomorrow.set(Calendar.MONTH, current.get(Calendar.MONTH));
tomorrow.set(Calendar.DAY_OF_MONTH,
current.get(Calendar.DAY_OF_MONTH) + 1);
tomorrow.set(Calendar.HOUR_OF_DAY, 0);
tomorrow.set(Calendar.MINUTE, 0);
tomorrow.set(Calendar.SECOND, 0);
current.setTime(date);
if (current.after(today) && current.before(tomorrow)) {
return "今天 "+time.split(" ")[1];
} else if (current.before(today) && current.after(yesterday)) {
return "昨天 " + time.split(" ")[1];
} else {
return dateToString(date,"MM月dd日 HH:mm");
}
}
/**
* 日期转换成字符串
* @param data 日期
* @param formatType 想要什么格式,输入什么格式,例如:"M月d日 HH:mm" "yyyy-MM-dd HH:mm"
* @return
*/
public static String dateToString(Date data, String formatType) {
return new SimpleDateFormat(formatType).format(data);
}
第二种:
/**
* 格式化时间
* 把 2017-04-28 15:41:00 转换成自己想要的时间格式
* @param time 2017-04-28 15:41:00
* @return
*/
public static String formatDateTime1(String time) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
if (time == null || "".equals(time)) {
return "";
}
Date date = null;
try {
date = format.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar current = Calendar.getInstance();
current.setTime(date);
return dateToString(date,"M月d日 HH:mm");
}
/**
* 日期转换成字符串
* @param data 日期
* @param formatType 想要什么格式,输入什么格式,例如:"M月d日 HH:mm" "yyyy-MM-dd HH:mm"
* @return
*/
public static String dateToString(Date data, String formatType) {
return new SimpleDateFormat(formatType).format(data);
}
再来个工具类:
public class CommonUtil {
private static final double EARTH_RADIUS = 6378137;
private static final DecimalFormat df = new DecimalFormat("#0.00");
/**
* 根据两点间经纬度坐标(double值),计算两点间距离,单位为米
*
* @param lng1
* @param lat1
* @param lng2
* @param lat2
* @return
*/
public static double distance2Point(double lng1, double lat1, double lng2,
double lat2) {
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+ Math.cos(radLat1) * Math.cos(radLat2)
* Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
public static String getDistance(double lng1, double lat1, double lng2,
double lat2) {
String strDistance = null;
double douDistance = distance2Point(lng1, lat1, lng2, lat2);
if (douDistance > 10000) {
strDistance = ">10KM";
} else {
strDistance = df.format(douDistance / 1000) + "KM";
}
return strDistance;
}
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* 修改part2的文字的颜色
*
* @param part1
* @param part2
* @param part3
* @param color
* @return
*/
public static SpannableStringBuilder getDialogSpanString(String part1, String part2, String part3, int color) {
SpannableStringBuilder builder = new SpannableStringBuilder(part1 + part2 + part3);
ForegroundColorSpan span = new ForegroundColorSpan(color);
builder.setSpan(span, part1.length(), part1.length() + part2.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return builder;
}
/**
* @param context
* @param style1
* @param part1
* @param style2
* @param part2
* @param style3
* @param part3
* @return
*/
public static SpannableStringBuilder getDateAndMoney(Context context, int style1, String part1, int style2, String part2, int style3, String part3) {
SpannableStringBuilder builder = new SpannableStringBuilder(part1 + part2 + part3);
TextAppearanceSpan span1 = new TextAppearanceSpan(context, style1);
TextAppearanceSpan span2 = new TextAppearanceSpan(context, style2);
TextAppearanceSpan span3 = new TextAppearanceSpan(context, style3);
builder.setSpan(span1, 0, part1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(span2, part1.length(), part1.length() + part2.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(span3, part1.length() + part2.length(), part1.length() + part2.length() + part3.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return builder;
}
public static SpannableStringBuilder get3TextStyle(Context context, int style1, String part1, int style2, String part2, int style3, String part3) {
SpannableStringBuilder builder = new SpannableStringBuilder(part1 + part2 + part3);
TextAppearanceSpan span1 = new TextAppearanceSpan(context, style1);
TextAppearanceSpan span2 = new TextAppearanceSpan(context, style2);
TextAppearanceSpan span3 = new TextAppearanceSpan(context, style3);
builder.setSpan(span1, 0, part1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(span2, part1.length(), part1.length() + part2.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(span3, part1.length() + part2.length(), part1.length() + part2.length() + part3.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return builder;
}
public static SpannableStringBuilder getOtherFee(Context context, int style1, String part1, int style2, String part2) {
if (part1 == null || part2 == null) {
return new SpannableStringBuilder(part1 + part2);
}
SpannableStringBuilder builder = new SpannableStringBuilder(part1 + part2);
TextAppearanceSpan span1 = new TextAppearanceSpan(context, style1);
TextAppearanceSpan span2 = new TextAppearanceSpan(context, style2);
builder.setSpan(span1, 0, part1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.setSpan(span2, part1.length(), part1.length() + part2.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return builder;
}
/**
* 根据资源名获取资源
*
* @param context
* @param name
* @return
*/
public static int getDrawableWithResName(Context context, String name) {
Resources res = context.getResources();
final String packageName = context.getPackageName();
int imageResId = res.getIdentifier(name, "drawable", packageName);
return imageResId;
}
public static int dip2px(Context context, float dpValue) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f * (dpValue >= 0 ? 1 : -1));
}
/**
* 将sp值转换为px值,保证文字大小不变
*
* @param spValue (DisplayMetrics类中属性scaledDensity)
* @return
*/
public static int sp2px(Context context, float spValue) {
float scale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * scale + 0.5f * (spValue >= 0 ? 1 : -1));
}
/**
* dp专px
* @param context
* @param dip
* @return
*/
public static int convertDipToPx(Context context, int dip) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dip * scale + 0.5f * (dip >= 0 ? 1 : -1));
}
/**
* 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的
*
* @param context
* @return true 表示开启
*/
public static final boolean isOPen(final Context context) {
LocationManager locationManager
= (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快)
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
// 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位)
boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (gps || network) {
return true;
}
return false;
}
/**
* 强制帮用户打开GPS
*
* @param context
*/
public static final void openGPS(Context context) {
Intent GPSIntent = new Intent();
GPSIntent.setClassName("com.android.settings",
"com.android.settings.widget.SettingsAppWidgetProvider");
GPSIntent.addCategory("android.intent.category.ALTERNATIVE");
GPSIntent.setData(Uri.parse("custom:3"));
try {
PendingIntent.getBroadcast(context, 0, GPSIntent, 0).send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
}
/**
* 用来判断服务是否运行.
*
* @param className 判断的服务名字
* @return true 在运行 false 不在运行
*/
public static boolean isServiceRunning(Context mContext, String className) {
boolean isRunning = false;
ActivityManager activityManager = (ActivityManager)
mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> serviceList
= activityManager.getRunningServices(30);
if (!(serviceList.size() > 0)) {
Log.d("hu8huService", "serviceList.size()=" + serviceList.size());
return false;
}
for (int i = 0; i < serviceList.size(); i++) {
Log.d("hu8huService", "serviceName=" + serviceList.get(i).service.getClassName());
if (serviceList.get(i).service.getClassName().contains(className) == true) {
Log.d("hu8huService", className + ".isRunning=true");
isRunning = true;
break;
}
}
return isRunning;
}
/**
* 判断点击事件频率
* @return
*/
private static long lastClickTime = 0;//上次点击的时间
private static int spaceTime = 1500;//时间间隔
public static boolean isFastClick() {
long currentTime = System.currentTimeMillis();//当前系统时间
boolean isAllowClick;//是否允许点击
if (currentTime - lastClickTime > spaceTime) {
isAllowClick = false;
} else {
isAllowClick = true;
}
lastClickTime = currentTime;
return isAllowClick;
}
/**
当前界面必须已经加载完成,不能直接在Activity的onCreate(),onResume(),onAttachedToWindow()中使用,
可以在这些方法中通过postDelayed的方式来延迟执行showSoftInput()。
* @param context 上下文
* @param view 必须是VISIBLE的EditText,如果不是VISIBLE的,需要先将其设置为VISIBLE。
*/
public static void showSoftInput(Context context, EditText view){
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
view.requestFocus();
imm.showSoftInput(view, 0);
}
}
/**
*
* @param context 上下文
* @param view view可以当前布局中已经存在的任何一个View,如果找不到可以用getWindow().getDecorView()。
*/
public static void hideSoftInput(Context context,EditText view){
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
/**
* 判断是否包含数字
* @param content
* @return true 包含 false 不包含
*/
public static boolean HasDigit(String content) {
boolean flag = false;
Pattern p = Pattern.compile(".*\\d+.*");
Matcher m = p.matcher(content);
if (m.matches()) {
flag = true;
}
return flag;
}
/**
* 去除一个字符串中的数字返回的字符串
* @param str
* @return
*/
public static String clearStringNum(String str){
return str.replaceAll("\\d+","");
}
/**
* 删除字符串中指定的字符
* @param str 原来的字符串
* @param replace 指定的字符
* @return 去除指定的字符的字符串
*/
public static String clearString(String str,String replace){
return str.replaceAll(replace,"");
}
public static String formatDateTime(String time) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
if (time == null || "".equals(time)) {
return "";
}
Date date = null;
try {
date = format.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar current = Calendar.getInstance();
Calendar today = Calendar.getInstance();
today.set(Calendar.YEAR, current.get(Calendar.YEAR));
today.set(Calendar.MONTH, current.get(Calendar.MONTH));
today.set(Calendar.DAY_OF_MONTH, current.get(Calendar.DAY_OF_MONTH));
// Calendar.HOUR——12小时制的小时数 Calendar.HOUR_OF_DAY——24小时制的小时数
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
Calendar yesterday = Calendar.getInstance();
yesterday.set(Calendar.YEAR, current.get(Calendar.YEAR));
yesterday.set(Calendar.MONTH, current.get(Calendar.MONTH));
yesterday.set(Calendar.DAY_OF_MONTH,
current.get(Calendar.DAY_OF_MONTH) - 1);
yesterday.set(Calendar.HOUR_OF_DAY, 0);
yesterday.set(Calendar.MINUTE, 0);
yesterday.set(Calendar.SECOND, 0);
Calendar tomorrow = Calendar.getInstance();
tomorrow.set(Calendar.YEAR, current.get(Calendar.YEAR));
tomorrow.set(Calendar.MONTH, current.get(Calendar.MONTH));
tomorrow.set(Calendar.DAY_OF_MONTH,
current.get(Calendar.DAY_OF_MONTH) + 1);
tomorrow.set(Calendar.HOUR_OF_DAY, 0);
tomorrow.set(Calendar.MINUTE, 0);
tomorrow.set(Calendar.SECOND, 0);
current.setTime(date);
if (current.after(today) && current.before(tomorrow)) {
return "今天 "+time.split(" ")[1];
} else if (current.before(today) && current.after(yesterday)) {
return "昨天 " + time.split(" ")[1];
} else {
return dateToString(date,"MM月dd日 HH:mm");
}
}
public static String formatDateTime1(String time) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
if (time == null || "".equals(time)) {
return "";
}
Date date = null;
try {
date = format.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar current = Calendar.getInstance();
current.setTime(date);
return dateToString(date,"M月d日 HH:mm");
}
public static String dateToString(Date data, String formatType) {
return new SimpleDateFormat(formatType).format(data);
}
}