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

36 篇文章 1 订阅
20 篇文章 4 订阅

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();
    }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鱼>

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值