北斗时间周和GPS时间周计算,JAVA为例

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

}

猜你喜欢

转载自blog.csdn.net/weixin_41267342/article/details/116677087