Calendar自然周
java中Calendar类获取的自然周是从周日到周六,但是我们理解的一周是从周一到周日。所以依然使用Calendar记录weekOfYear,dayOfWeek会有两个问题:
1.周日这一天,按照两种计算方式所在的周(weekOfYear)不同;
2.查询一周的记录时,周几(dayOfWeek)是从周日到周六。
处理方式:
1.判断某天属于第几周
/**
* 判断具体某个周日属于第几周
*/
@Test
public void getWeekOfYear() throws ParseException{
String time = "2017-01-08";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse(time);
/*
* 不做任何设置
*/
Calendar c = Calendar.getInstance();
c.setTime(date);
System.out.println(c.get(Calendar.WEEK_OF_YEAR));
/*
* 设置一周从周一开始,最少两天
*/
Calendar c1 = Calendar.getInstance();
c1.setTime(date);
c1.setMinimalDaysInFirstWeek(2);// 设置第一周最少2天
c1.setFirstDayOfWeek(Calendar.MONDAY);// 设置一周的第一天为周一
System.out.println(c1.get(Calendar.WEEK_OF_YEAR));
/*
* setFirstDayOfWeek:设置一周从周几开始
* setMinimalDaysInFirstWeek:设置第一周最少天数
* 这个是从一年的第一天开始计算,当前日期属于满足规则的第几周
*/
/*
* 设置一周从周日开始,最少两天
*/ Calendar c2 = Calendar.getInstance();
c2.setTime(date);
c2.setMinimalDaysInFirstWeek(2);// 设置第一周最少2天
c2.setFirstDayOfWeek(Calendar.SUNDAY);// 设置一周的第一天为周日
System.out.println(c2.get(Calendar.WEEK_OF_YEAR));
/*
* setFirstDayOfWeek:设置一周从周几开始
* setMinimalDaysInFirstWeek:设置第一周最少天数
* 这两个条件满足一个就能表示一周:2017-01-01满足一周从周日开始
*/
}
打印:2
1
2
2.周几
Calendar中周几的数值是固定的,SUNDAY就是1,MONDAY就是2,所以要存入想要的周几就要条件判断。
3.根据周查询日期
@Test
public void getDate(){
int year = 2017;
int week = 2;
/*
* 不做任何设置
*/
System.out.println("不做任何设置");
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);// 设置年
c.set(Calendar.WEEK_OF_YEAR, week); // 设置周
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);// 设置周几
System.out.println("周一:" + c.getTime());// 获取日期
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 设置周几
System.out.println("周日:" + c.getTime());// 获取日期
System.out.println();
/*
* 设置一周从周一开始,最少两天
*/
System.out.println("设置一周从周一开始,最少两天");
Calendar c1 = Calendar.getInstance();
c1.setFirstDayOfWeek(Calendar.MONDAY);
c1.setMinimalDaysInFirstWeek(2);// 设置一周最少2天
c1.set(Calendar.YEAR, year);// 设置年
c1.set(Calendar.WEEK_OF_YEAR, week); // 设置周
c1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);// 设置周几
System.out.println("周一:" + c1.getTime());
c1.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 设置周几
System.out.println("周日:" + c1.getTime());
System.out.println();
/*
* 设置一周从周天开始,最少两天
*/
System.out.println("设置一周从周天开始,最少两天");
Calendar c2 = Calendar.getInstance();
c2.setFirstDayOfWeek(Calendar.SUNDAY);
c2.setMinimalDaysInFirstWeek(2);// 设置一周最少2天
c2.set(Calendar.YEAR, year);// 设置年
c2.set(Calendar.WEEK_OF_YEAR, week); // 设置周
c2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println("周一:" + c2.getTime());
c2.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
System.out.println("周日:" + c2.getTime());
}
打印:
不做任何设置
周一:Mon Jan 09 17:34:07 GMT+08:00 2017
周日:Sun Jan 08 17:34:07 GMT+08:00 2017
设置一周从周一开始,最少两天
周一:Mon Jan 09 17:34:07 GMT+08:00 2017
周日:Sun Jan 15 17:34:07 GMT+08:00 2017
设置一周从周天开始,最少两天
周一:Mon Jan 09 17:34:07 GMT+08:00 2017
周日:Sun Jan 08 17:34:07 GMT+08:00 2017
综上:c1.setFirstDayOfWeek(Calendar.MONDAY);
c1.setMinimalDaysInFirstWeek(2);// 设置一周最少2天
这两个方法定义了一个自然周的条件(默认是Sunday和1)
获取自然周weekOfYear后,根据自然周查询日期也要设置相应的条件。
Calendar自然周相关推荐
- 如何在outlook里显示自然周的周数
一年有52周,我们如何在outlook里方便的查看自然周的序号呢?比如2019年11月25日到29日是2019年的第几周?outlook默认是没有显示这个序号的. option设置里,打开Calend ...
- Date-如何获取自然天,自然周,自然月,自然年?
前言:有次在开发过程中,遇到一个需求.需要获取上count个自然天,自然周,自然月,自然年. 当时第一反应就是有没有工具类可以直接实现这个功能. 经过一番的探索,最终发现了这个工具类:Calendar ...
- 查询某一日期所在的自然周,以周一为开始
查询某一日期所在的自然周,以周一为开始 代码如下: import java.text.SimpleDateFormat; import java.util.Calendar; import java. ...
- 获取某一年指定自然周的开始时间和结束时间
获取某一年指定自然周的开始时间和结束时间 package com.playmath.playmathcrm.util; import java.text.ParseException; import ...
- 【scala】获取当前时间的上一个自然周以及自然周集合;获取当前时间的上一个自然月以及自然月的第一天与最后一天
获取当前时间的上一个自然周的开始时间: import java.text.SimpleDateFormat import java.util.{Calendar, Date}def getLastWe ...
- java 获取当前时间所在自然周起止时间及自然周中的每一天
有的时候需要获取当前时间所在自然周中的起始和截止时间,或者某个时间段内里的每一天的日期 1.先来解决获取自然周中的起止时间 /*** 获取当前时间所在自然周的起止日期** @return*/publi ...
- 获取自然周 自然月 区间
public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");/*** @Descri ...
- mysql查询最近一个自然周_自然周与自然月的Hive统计SQL
按照周或者月统计活跃数: 周: SELECT week, COUNT(DISTINCT pin), business_type FROM ( SELECT DISTINCT user_log_acct ...
- Oracle中按天、自然周、月、季、年周期统计
在Oracle中,Mysql中以及Hive中,SQL实现同样的功能有时候可能要遵循不同的语法结构,尤其在日期操作方面区别较为明显.接下来,将Oracle中常用的周期统计梳理出来. 1. 按天统计 Or ...
最新文章
- 英特尔® 至强® 平台集成 AI 加速构建数据中心智慧网络
- checkedListBox的使用
- PHP 7.0新增特性详解
- LTE: UE特定的参考信号
- 向量时钟算法简介——本质类似MVCC
- 百度工程师控制公司服务器“挖矿”:4个月赚10万 判刑3年
- Ionic中自定义公共模块以及在自定义模块中使用ionic内置模块
- bn层初始化参数_神经网络参数初始化方式
- HackerRank Nimble Game
- 2015 German Collegiate Programming Contest (GCPC 15)
- (四)语音识别测试案例
- 基于迁移学习的mini-imagenet数据分类实践
- scrapy框架使用教程
- Android MessageQueue与Message详解
- h5 实现微信支付以及易宝银行卡支付
- iOS开发证书/发布证书不受信任
- 编译问题追踪 :高通驱动移植 <utils/Log.h>问题
- 前端实现从视频中抽离出音频
- Pulsar Topics(主题)和 Namespaces(命名空间)
- 2021 ICPC Southeastern Europe Regional Contest 树上dfs+思维
热门文章
- 2.4 zio入门——ZIO类型参数
- 电脑桌面变窄屏,两端为黑色
- SQL注入原理及绕过技术
- Xshell 6链接Liunx链接不上:
- Bellman-Ford(最短路)
- sqlitespy可以打开MySQL吗_SQLite 数据库访问
- 腾讯云 linux pptpd 搭建 和遇到的部分问题解决
- [算法入门笔记] 18. 动态规划
- 零基础可以学计算机编程吗,计算机编程好学吗,零基础小白可以吗,入门应该先学什么?...
- 40V转5V,40V转3.3V,40V转3V降压芯片和LDO芯片选型表