Java 根据字符串格式日期 转化出当前属于哪一年的第几周

Posted 小目标青年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 根据字符串格式日期 转化出当前属于哪一年的第几周相关的知识,希望对你有一定的参考价值。

函数:
 

    /**
     * 转化指定日期,哪一年第几周
     * @param dateStr
     * @return
     */
    public static String getWeeksInMonthOfDate(String dateStr) throws ParseException 
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);
        calendar.setTime(dateFormat.parse(dateStr));
        int weekOfYear = calendar.get(Calendar.YEAR);
        int weekNo = calendar.get(Calendar.WEEK_OF_YEAR);
        //Calendar获取月份需要+1
        int nowMonth = calendar.get(Calendar.MONTH) +1;
        //正常12月份肯定都是大月份的周数如53 52 51 50 49 如果周数是1而月份是12,则表示日期被计算在了下一年 年份需要 +1
        if(weekNo==1 && nowMonth==12)
            weekOfYear = weekOfYear + 1;
        
        //1月份肯定都是小周数如1,2,3,4,5 如果周数是52 或者53 而月份是1 则表示日期被计算在了上一年,年份需要-1
        if((weekNo==53 || weekNo==52)  && nowMonth==1)
            weekOfYear = weekOfYear - 1;
        
     return  weekOfYear+"年"+"第"+weekNo+"周";
    

ps:

calendar.setMinimalDaysInFirstWeek(4);

为什么设置4 ,至少4天, 因为跟sql很多函数保持一致。

mysql WEEKOFYEAR() 函数返回给定日期位于当年的第几周,取值范围为 1 到 53

该函数的前提是“一周的第一天是星期一,并且一年中的第一周有 3 天以上”,它相当于 WEEK(date,3)

测试效果:
 

    public static void main(String[] args) throws ParseException 
        String dayStr="2023-04-06";
        String result = getWeeksInMonthOfDate(dayStr);
        System.out.println(result);
    

输出:

2023年第14周


注意点, 比如2022-01-02 ,看起来是22年的日期,其实是属于在2021年的 52周里面。

测试效果:

    public static void main(String[] args) throws ParseException 
        String dayStr="2022-01-02";
        String result = getWeeksInMonthOfDate(dayStr);
        System.out.println(result);

    

输出:

2021年第52周

相当于mysql的  WEEKOFYEAR 函数  :


 

 好了,该篇就到这。

sql中,根据身份证号码截取出了出生日期,怎么获取当前年龄,精确到月、日?

具体代码就不写了

思路如下

    身份证18位 从多少位是年月日来着?大概是第7--15是年月日 substring()方法

    获取当前年与日

    两个日期转化为毫秒相减,相减后的毫秒转化为天数
    给个小例子

    public static void main(String[] args) 
    Calendar nowDate=Calendar.getInstance(),oldDate=Calendar.getInstance();
    nowDate.setTime(new Date());//设置为当前系统时间 
    oldDate.set(1990, 5, 19);//设置为1990年(6)月29日
    long timeNow=nowDate.getTimeInMillis();
    long timeOld=oldDate.getTimeInMillis();
    long 相隔天数=(timeNow-timeOld)/(1000*60*60*24);//化为天
    System.out.println("相隔"+相隔天数+"天");

追问

select cast(substring(IdentityCard,7,8) as datetime) from checkwork_person
我这样取出了出生日期,
怎样判断月、日是否超过当前日期的月、日,如果没有超过,年龄不增加一岁,超过了才增加一岁,求sql语句

追答

这个追求的有点精确了,大致算了我们按照年份即可。比如你是88年12月的 我们算到今年13年1月就算等于13年12月
精确算也是那样 取出月日 然后与当前月日比较啊,小于当前就是没到,大于当前就是过了

参考技术A 了解到身份证编号的规则,其中8位表示出生年份以及月日,然后与当前系统时间进行日期比较。
利用sql自带的日期函数,就可以了。相信你肯定很快就能搞定的。
参考技术B 18位身份证 前6位是区号地区第7~14位就是出生年月日 XXXX年XX月XX日
SQL是什么
参考技术C 身份证号上有啊

以上是关于Java 根据字符串格式日期 转化出当前属于哪一年的第几周的主要内容,如果未能解决你的问题,请参考以下文章

如何用sql的日期函数,分别查出1月~12月每个月的销售金额?

日期和字符串的转化

Java时间格式字符串与Date的相互转化

js中如何将日期转化字符串

js 如何把字符串转化为日期

java parse 带英文单词的日期字符串 转 date (转化新浪微博api返回的时间)