目的:在项目中遇到一个小的需求:
1.将日期转换为每年的第多少个星期
2.通过每年的第几个星期和属于周几,获取日期.
具体的实现方式:
方式一:通过Calendar 类来实现
话不多说,直接上测试代码:
public class TimeTest {
@Test
//计算日期属于第几周
public void getDayOfYway() throws ParseException {
String adate="2019年8月29日";//周四
Calendar cal = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
cal.setTime(format.parse(adate));
int week = cal.get(Calendar.WEEK_OF_YEAR);
System.out.println(week);//35
}
}
今天写的博客,就用今天的日期测试一下,今天是2019年8月29日,周四
通过上面的代码我们可以计算出 它属于一年中的第35周.
下面我们再用上面获取的日期进行反面测试一下.
就是说我们已经知道属于一年中的第35个星期,知道是周四,想获取日期:
@Test
//通过一年中的第几周和周几,获取日期
public void translatedata() {
int weekodyear = 35;
int week = 4;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2019); // 2019
cal.set(Calendar.WEEK_OF_YEAR, weekodyear);
cal.set(Calendar.DAY_OF_WEEK, week); // 1表示周日,2表示周一,7表示周六
Date date = cal.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(date);
System.out.println(dateString);
}
输出的日期就是今天的日期.
方式二:通过joda-time 来实现
首先需要在pom.xml中引入下面的依赖
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.3</version>
</dependency>
@Test
public void testDate() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date = sdf.parse("2019/8/129");
DateTime dt = new DateTime(date.getTime());
System.out.println(dt.getWeekOfWeekyear());
System.out.println(dt.getDayOfWeek());
System.out.println(dt);
}
@Test
public void tt1() {
final DateTime dt = new DateTime();
DateTime time = dt.withDayOfWeek(5).withWeekOfWeekyear(35);
System.out.println(time);
}
希望可以帮助有需要的人.