记录一些常用的java方法(包含时间,地理位置等)

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格式的操作和各种转换,字符串的判断。。。。就请自行发掘把。
记录一些常用的java方法(包含时间,地理位置等)_第1张图片

你可能感兴趣的:(java工具集)