最近接了个需求,解析从美国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);}