最近接了个需求,解析从美国NASA官网下载的文件和从北斗官网下载的文件,而文件名字是以GPS时间周和周几、北斗时间周和周几命名,每天都会有新数据,定时任务获取文件,定时任务获取就需要程序根据当天时间自动计算文件名字。
想计算这两个时间周,就要先明白其各自的计算规则
GPS时间是以 "1980-01-06 00:00:00" 为起点的,
北斗时间是以"2006-01-01 00:00:00"为起点
这个两个起始时间,是解决问题最关键的部分
要想计算时间周,就需要获取当前时间,减去各自的开始时间,获取到天数,再进行周和周几计算
/**
* 计算两个时间之间的天数
* @author yxt
* @param d1
* @param d2
* @return
*/
public static long calendarminus(Calendar d1, Calendar d2) {
if (d1 == null || d2 == null) {
return 0;
}
return (d1.getTimeInMillis() - d2.getTimeInMillis()) / (3600 * 24000);
}
/**
* 获取gps时间周和北斗时间周
* * @author yxt
* @throws Exception
*/
public static void getGpsAndBeidouWeek() throws Exception{
//2021.5.11的文件名为:GPS_DATA_21571.text、BEIDOU_DATA_8011.text
//其中21571中前四位为gps时间周,最后一位为周几(以周一为0)
//其中8011中前三位为北斗时间周,最后一位为周几(以周一为0)
//计算的关键在于知道gps开始时间为"1980-01-06 00:00:00",北斗开始时间为:"2006-01-01 00:00:00"
SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//日期格式化
Calendar calendarNow = Calendar.getInstance(); //
// gps时间周计算
Calendar calendarGps= Calendar.getInstance(); //java.util包
Date gpsStartDate = sdfTime.parse("1980-01-06 00:00:00");
calendarGps.setTime(gpsStartDate);
long gpsToTodayDays = calendarminus(calendarNow, calendarGps);
long gpsWeeks = gpsToTodayDays / 7;
long dayOfGpsWeek = gpsToTodayDays % 7-1;
System.out.println(gpsWeeks);
System.out.println(dayOfGpsWeek);
// 北斗时间周计算
Calendar calendarBeidou= Calendar.getInstance(); //java.util包
Date beidouStartDate = sdfTime.parse("2006-01-01 00:00:00");
calendarBeidou.setTime(beidouStartDate);
long beidouToTodayDays = calendarminus(calendarNow, calendarBeidou);
long beidouWeeks = beidouToTodayDays / 7;
long dayOfBeidouWeek = beidouToTodayDays % 7 -1;
System.out.println(beidouWeeks);
System.out.println(dayOfBeidouWeek);
}