车联网数据解析常用方法集Java (持续更新)

1. 经纬度

经伟度的度分秒的换算关系如下:   

①换算关系 :

1度=60分;

1分=60秒; 

②换算举例 :

一般情况下,换算原理是这样的:

把度的数值中的小数点的转换成为分,取分之整数,再把分的小数转换成为秒。   

举例说明:例如:31.87654度   

把数值度的小数点以后的数字乘以60分/度 :0.87654*60=52.5924分   

把数值分的小数点以后的数字乘以60秒/分 :0.5924*60=35.554秒   

合计:31度52分35.554秒

1.1.将格式为dddmm.mmmm—>ddd.dddddd(度分转度)

    /**
     * 经纬度度分转度
     * @param value
     * @return
     */
    public static double parseLatLon(String value){
        int d=(int)Double.parseDouble(value)/100;
        double m=Double.parseDouble(value)%100;
        return d+(m/60);
    }

1.2.将部标(JT/T 808)经纬度格式转成ddd.dddddd

纬度值乘10 的6 次方,精确到百万分之一度,单位:度

public static final BigDecimal COORDINATE_PRECISION = new BigDecimal("0.000001");

    /**
     * BigDecimal乘法
     * @param longNum
     * @return
     */
    public static double multiply(long longNum) {
        return new BigDecimal(String.valueOf(longNum)).multiply(COORDINATE_PRECISION).doubleValue();
    }

2. 时间操作

2.1.将固定格式的时间转成UTC时间

    /**
     * 将特定格式的时间字符串转成UTC时间
     * @param bcdTimeStr 时间字符串
     * @param dateTimeFormatter 字符串格式,比如:"ddMMyyHHmmss"
     * @return
     */
    public static ZonedDateTime parseBcdTime(String bcdTimeStr,String dateTimeFormatter) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateTimeFormatter);
        LocalDateTime localDateTime = LocalDateTime.parse(bcdTimeStr, formatter);
        ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneOffset.UTC);
        return zonedDateTime;
    }

2.2.获取本地UTC时间

//当前时间
ZonedDateTime currentDateTime = ZonedDateTime.now(ZoneOffset.UTC);

2.3. 获取当天的开始与结束时间

    /**
     * 获取当天的开始时间
     * @return
     */
    public static Date getDayBegin() {
        Calendar cal = new GregorianCalendar();
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    /**
     * 获取当天的结束时间
     * @return
     */
    public static Date getDayEnd() {
        Calendar cal = new GregorianCalendar();
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        return cal.getTime();
    }

2.4.获取两个时间段内所有的日期

    /**
     * 获取两个时间段内所有的日期String
     * @param startTime
     * @param endTime
     * @return
     */
    public static List<String> getBetweenDays(String startTime, String endTime) {
        // 返回的日期集合
        List<String> days = new ArrayList<String>();
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date start = dateFormat.parse(startTime);
            Date end = dateFormat.parse(endTime);
            Calendar tempStart = Calendar.getInstance();
            tempStart.setTime(start);
            Calendar tempEnd = Calendar.getInstance();
            tempEnd.setTime(end);
            //日期加1(包含结束)
            tempEnd.add(Calendar.DATE, +1);
            while (tempStart.before(tempEnd)) {
                days.add(dateFormat.format(tempStart.getTime()));
                tempStart.add(Calendar.DAY_OF_YEAR, 1);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return days;
    }

2.5.获取时间对于的时间戳

    /**
     * 获取毫秒级时间戳
     * @param date
     * @return
     */
    public static Long getEpochMilli(Date date){
        return date.toInstant().toEpochMilli();
    }
    
    /**
     * 获取秒级时间戳
     * @param date
     * @return
     */
    public static Long getEpochSecond(Date date){
        return date.toInstant().getEpochSecond();
    }

3.内容转换

3.1. 读ByteBuf固定长度并转成GBK字符串

    /**
     * 默认编码
     */
    public static final Charset DEFAULT_CHARSET = Charset.forName("GBK");

    /**
     * ByteBuf读取GBK字符串
     *
     * @param buf 
     * @param len 读取长度
     * @return GBK字符串
     */
    public static String readGbkString(ByteBuf buf, int len) {
        return buf.readCharSequence(len, DEFAULT_CHARSET).toString().trim();
    }

おすすめ

転載: blog.csdn.net/qq_17486399/article/details/120201648