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