1.使用Calendar进行天数日期的计算时间
//获取calendar实例
Calendar calendar = Calendar.getInstance();
//设置时,可在new Date()中指定时间,例如:new Date("2019/09/02"),注意:如果使用2019-09-02会抛出参数不对的异常
calendar.setTime(new Date());
//设置要操作的时间类型和想要减去的月份,tag指代具体的月份,
//计算月份
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - tag);
//计算天数
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - tag);
calendar.getTime();
2.根据经纬度计算距离
/**
* 根据经纬度计算距离的方法
* @param longitude1 第一个点的经度
* @param latitude1 第一个点的纬度
* @param longitude2 第二个点的经度
* @param latitude2 第二个点的纬度
* @return 返回距离 单位千米
*/
public static double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) {
// 纬度
double lat1 = Math.toRadians(latitude1);
double lat2 = Math.toRadians(latitude2);
// 经度
double lng1 = Math.toRadians(longitude1);
double lng2 = Math.toRadians(longitude2);
// 纬度之差
double a = lat1 - lat2;
// 经度之差
double b = lng1 - lng2;
// 计算两点距离的公式
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
// 弧长乘地球半径, 返回单位: 千米
s = s * EARTH_RADIUS;
return Math.round(s * 1000);
}
//sql中计算经纬度,向上取整,单位为米
ROUND(ST_DISTANCE(POINT(数据库中的经度, 数据库中的纬度),POINT(#{前端传递的经度}, #{前端传递的纬度}))*111195) distance
3.解析JSON格式并获取到我们想要的值
例如:我们使用百度orc解析身份证的时候返回的这种json格式,我们想要获取到姓名,民族,出生,性别等这些数据就可以使用这种方法来解析
{
"log_id": 45279587206xxxxxx,
"words_result": {
"姓名": {
"words": "xxx",
"location": {
"top": 679,
"left": 229,
"width": 102,
"height": 42
}
},
"民族": {
"words": "汉",
"location": {
"top": 754,
"left": 397,
"width": 23,
"height": 29
}
},
"住址": {
"words": "湖南省xxxxxx26号附1号",
"location": {
"top": 892,
"left": 241,
"width": 344,
"height": 79
}
},
"公民身份号码": {
"words": "430524xxxxxxxx",
"location": {
"top": 1063,
"left": 375,
"width": 465,
"height": 46
}
},
"出生": {
"words": "1983xxxx",
"location": {
"top": 822,
"left": 236,
"width": 264,
"height": 32
}
},
"性别": {
"words": "男",
"location": {
"top": 759,
"left": 229,
"width": 26,
"height": 30
}
}
},
"words_result_num": 6,
"image_status": "normal"
}
/**
* 处理返回数据
* @param jsonObject
*/
private UserSfzFront processDataFront(JSONObject jsonObject){
UserSfzFront userSfzFront = new UserSfzFront();
List list = Arrays.asList("姓名", "民族", "住址", "公民身份号码", "出生", "性别");
//反射获取类的field实例
Field[] declaredFields = UserSfzFront.class.getDeclaredFields();
for (int i = 0; i < declaredFields.length; i++) {
//获取类中的每一个属性
Field declaredField = declaredFields[i];
try{
//传入json数据和json格式对应的k
String value = getFieldValue(jsonObject, "words_result", list.get(i), "words");
//处理数据
//若类中属性值为private修饰符修饰需要设置为true才能set进值,不然会抛出错误
declaredField.setAccessible(true);
if("男".equals(value)){
declaredField.set(userSfzFront, 1);
continue;
}
if("女".equals(value)){
declaredField.set(userSfzFront, 2);
continue;
}
declaredField.set(userSfzFront, value);
}catch(Exception e){
e.printStackTrace();
return null;
}
}
return userSfzFront;
}
/**
* 解析json返回数据
* @param json
* @param fields
* @return
*/
private String getFieldValue(Object json, String... fields){
for (String field : fields) {
json = convertJson(json, field);
}
return json.toString();
}
private Object convertJson(Object json, String filed){
return com.alibaba.fastjson.JSONObject.parseObject(json.toString()).get(filed);
}
实体对象如下
@Data
@ToString
@Accessors(chain = true)
public class UserSfzFront {
private String name;
private String nation;
private String addr;
private String idcard;
private String birthday;
private Integer sex;
}
4.Date日期转为localdate
//转为LocalDateTime
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 2);
Instant instant = calendar.getTime().toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime time = LocalDate.from(instant.atZone(zoneId).toLocalDateTime());
//转为LocalDate
LocalDate time = LocalDate.from(instant.atZone(zoneId).toLocalDateTime());
//LocalDate转为Date:
//定义格式
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime parse = LocalDateTime.parse("2018-10-18 10:00:00", dateTimeFormatter);
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = parse.atZone(zoneId);
//转为Date类型
Date from = Date.from(zonedDateTime.toInstant())
5.分享一个java工具集的jar包
cn.hutool
hutool-all
4.6.1
maven项目可直接引入,新版本请再maven仓库中搜索,其中包含很多日常中使用的工具类,方便了我们的开发工作。例如日期的操作,JSON格式的操作和各种转换,字符串的判断。。。。就请自行发掘把。