java 某年某月第几周第几天 是几月几号

紧急求救。我现在要根据 某年某月第几周第几天 换算成 yyyy-MM-dd 格式的日期。 求教高手。。。
感谢各位回复。因为我不知道当天是几号。只有星期几的信息。所以 aaronswon 的回答无法满足我的需求。。可能我没说清楚。 例如,我现在知道 2009年2月第三周的星期四 需要换算成 2009-02-19

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class DateUtil {

/**
*
* @param year 年份
* @param month 月份
* @param weekOfMonth 这个月的第几周
* @param dayOfWeek 星期几
* @return
*/
public static String weekdatetodata(int year,int month,int weekOfMonth,int dayOfWeek){
Calendar c = Calendar.getInstance();
//计算出 x年 y月 1号 是星期几
c.set(year, month-1, 1);

//如果i_week_day =1 的话 实际上是周日
int i_week_day = c.get(Calendar.DAY_OF_WEEK);

int sumDay = 0;
//dayOfWeek+1 就是星期几(星期日 为 1)
if(i_week_day == 1){
sumDay = (weekOfMonth-1)*7 + dayOfWeek+1;
}else{
sumDay = 7-i_week_day+1 + (weekOfMonth-1)*7 + dayOfWeek +1;
}
//在1号的基础上加上相应的天数
c.set(Calendar.DATE, sumDay);
SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd");
return sf2.format(c.getTime());
}
public static void main(String[] args) {
//2009年1月 第二周星期三 得到2009-01-14
System.out.println(weekdatetodata(2009, 1, 2, 3));
//2009年2月 第二周星期三 得到2009-02-11
System.out.println(weekdatetodata(2009, 2, 2, 3));
//2009年4月 第二周星期三 得到2009-04-15
System.out.println(weekdatetodata(2009, 4, 2, 3));
//2009年2月 第三周星期四 得到2009-02-19
System.out.println(weekdatetodata(2009, 2, 3, 4));
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-02-23
package com.jxdinfo.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
* @Copyright @ 2008
* All right reserved
* @version 创建时间:Created on Feb 27, 2008
* @author 作者:Create by zhen
* @Email: [email protected]
* @QQ: 275159177
* @description 类说明
*
*/
public class DateUtil {
/**
* 得到两个日期间的年数
* @param from
* @param to
* @return
*/
@SuppressWarnings("static-access")
public static int coutYear(Date from,Date to){
Calendar calendar = Calendar.getInstance();
calendar.setTime(to);
int toYear = calendar.get(Calendar.YEAR);
calendar.setTime(from);
int fromYear = calendar.get(Calendar.YEAR);
return Math.abs(toYear - fromYear);
}
/**
* 得到系统当前日期的字符串表示,默认格式为(yyyy-MM-dd)
* @return 当前系统日期
*/
public static String nowDate(String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date());
}
/**
* 得到指定日期指定格式的字符串表示。
* @param date 日期
* @param format 格式
* @return 指定格式的字符串日期
*/
public static String dateToString(Date date,String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
if(date==null){
date = new Date();
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
/**
* 得到默认格式(yyyy-MM-dd)的当前日期的字符串表示
* @return 系统当前日期
*/
public static String nowDate(){
return nowDate(null);
}
/**
* 得到系统去年今天的日期
* @return 返回指定格式的字符串日期
*/
public static String previousYearNowDate(String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)-1);
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(calendar.getTime());
}
/**
* 得到系统去年今天的日期
* @return 返回默认格式的字符串日期
*/
public static String previousYearNowDate(){
return previousYearNowDate(null);
}
/**
* 得到系统去年今天的日期
* @return Date 返回类型为日期类型 java.util.Date;
*/
public static Date previousYearNowDate_Date(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)-1);
return calendar.getTime();
}
/**
* 得到系统今年今天的日期
* @return 返回类型为指定格式的字符串
*/
public static String nextYearNowDate(String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)+1);
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(calendar.getTime());
}
/**
* 得到系统今年今天的日期
* @return 返回类型为默认格式的字符串
*/
public static String nextYearNowDate(){
return nextYearNowDate(null);
}
/**
* 得到系统今年今天的日期
* @return 返回类型为日期类型java.util.Date;
*/
public static Date nextYearNowDate_Date(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)+1);
return calendar.getTime();
}
/**
* 得到系统指定年份今天的日期
* @return 返回类型为日期类型java.util.Date;
*/
public static Date dateOfAccordYear(int year){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
return calendar.getTime();
}
/**
* 得到指定偏移量的年份的今天的日期
* @param offset 偏移量,为正数向后数,为正数向前数。
* @param format 指定日期格式
* @return 返回类型为默认格式的字符串
*/
public static String dateOfAccordYear_String(int offset,String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)+offset);
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(calendar.getTime());
}
/**
* 得到默认格式指定偏移量的年份的今天的日期
* @param offset 偏移量,为正数向后数,为正数向前数。
* @return 返回类型为默认格式的字符串
*/
public static String dateOfAccordYear_String(int offset){
return dateOfAccordYear_String(offset,null);
}
/**
* 得到指定偏移量的年份的今天的日期
* @param offset 偏移量,为正数向后数,为正数向前数。
* @return 返回类型为日期类型java.util.Date;
*/
public static Date dateOfAccordYear_Date(int offset){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)+offset);
return calendar.getTime();
}
/**
* 通过指定年得到指定年的第一天第一刻
* @param year 年
* @return 指定年的第一天第一刻
*/
public static Date firstDateOfYear_Date(Integer year){
Calendar calendar = Calendar.getInstance();
if(year==null){
calendar.set(calendar.get(Calendar.YEAR), 0, 1, 0, 0, 0);
}else{
calendar.set(year, 0, 1, 0, 0, 0);
}
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 按照指定年份指定格式得到指定年的第一天第一刻字符串格式的日期
* @param year 年
* @param format 格式
* @return 指定格式字符串
*/
public static String firstDateOfYear_String(Integer year,String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
Calendar calendar = Calendar.getInstance();
if(year==null){
calendar.set(calendar.get(Calendar.YEAR), 0, 1, 0, 0, 0);
}else{
calendar.set(year, 0, 1, 0, 0, 0);
}
calendar.set(Calendar.MILLISECOND, 0);
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(calendar.getTime());
}
/**
* 得到指定年份的最后一天的最后时刻
* @param year 年
* @return
*/
public static Date lastDateOfYear_Date(Integer year){
Calendar calendar = Calendar.getInstance();
if(year==null){
calendar.set(calendar.get(Calendar.YEAR)+1, 0, 1, 0, 0, 0);
}else{
calendar.set(year+1, 0, 1, 0, 0, 0);
}
calendar.set(Calendar.MILLISECOND, 0);
return new Date(calendar.getTime().getTime()-1);
}
/**
* 得到指定年份的最后一天的最后时刻
* @param year 年
* @param format 格式
* @return 指定格式字符串
*/
public static String lastDateOfYear_String(Integer year,String format){
if(format==null||format.equals("")){
format="yyyy-MM-dd";
}
Calendar calendar = Calendar.getInstance();
if(year==null){
calendar.set(calendar.get(Calendar.YEAR)+1, 0, 1, 0, 0, 0);
}else{
calendar.set(year+1, 0, 1, 0, 0, 0);
}
calendar.set(Calendar.MILLISECOND, 0);
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date(calendar.getTime().getTime()-1));
}
/**
* 两个日期之间的天数
* @param from
* @param to
* @return
*/
public static int countDay(Date from,Date to){
Long length = to.getTime() - from.getTime();
int dayCount = (int) (length/60/60/1000/24);
return Math.abs(dayCount);
}
/**
* 得到一个日期月份的最大天数
* @param date
* @return
*/
public static int maxDateOfMonth(Date date){
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
int maxDateOfMonth=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
return maxDateOfMonth;

}
/**
* 计算某一天是一年中的第几星期
* @param date
* @return
*/
public static int weekOfYear(Date date){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);
return weekno;
}
/**
* 计算一年中的第几星期是几号
* @param year
* @param weekno
* @return
*/
public static Date weekOfFirstDate(int year,int weekno){
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, weekno);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return cal.getTime();
}
/**
* 计算一个日期加上或减去一定天数后的日期,
* 加一定的天数时传入的days是一个正数,
* 减去一定的天数时传入的days是一个负数。
* @param date 给定日期
* @param days 加入的天数
* @return 目标日期
*/
public static Date dateAddOrSubDays(Date date , int days){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days);
return cal.getTime();
}
/**
* 计算一个日期加上或减去一定月数后的日期,
* 加一定的月数时传入的months是一个正数,
* 减去一定的月数时传入的months是一个负数。
* @param date
* @param months
* @return
*/
public static Date dateAddOrSubMonths(Date date , int months){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, months);
return cal.getTime();
}
/**
* 计算某人在某年的年龄
* @param birthday
* @param year
* @return
*/
public static int countAge(Date birthday,int year){
Calendar cal=Calendar.getInstance();
cal.setTime(birthday);
cal.set(Calendar.YEAR, year);
if(cal.getTime().getTime()>birthday.getTime()){
return coutYear(birthday,cal.getTime());
}else{
return 0;
}

}
/**
* 返回指定日期的年份
* @param date
* @return
*/
public static int getYearFromDate(Date date){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.YEAR);
}
/**
* 返回指定日期的月份
* @param date
* @return
*/
public static int getMonthFromDate(Date date){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.MONTH)+1;
}
/**
* 返回指定日期的日
* @param date
* @return
*/
public static int getDateFromDate(Date date){
Calendar cal=Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DATE);
}
/**
*
* @param args
*/
public static void main(String[] args){
Calendar cal=Calendar.getInstance();
Date date= cal.getTime();
System.out.println(date);
System.out.println(dateAddOrSubMonths(date , 1000));
System.out.println(firstDateOfYear_Date(2009));
System.out.println(new Date(firstDateOfYear_Date(2009).getTime()-1));
System.out.println(lastDateOfYear_String(2009,null));
}

}
第2个回答  2009-02-23
import java.text.SimpleDateFormat;

public class DateTranslator extends java.util.GregorianCalendar{
private static final DateTranslator dt = new DateTranslator();
private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd",java.util.Locale.CHINA);
public static void main(String[] args) {
String d=format(2009,2,3,4);//求2009年2月第3周的星期4
System.out.println(d);
}

public static String format(int year,int month,int week,int weekday){
//将日期设置成 year 年的 month 月1日
dt.setTimeInMillis(0);
dt.set(YEAR,year);
dt.set(MONTH,month-1);
dt.set(DATE,1);
//求出 year 年的 month 月1日是星期几
int xweekday = dt.get(DAY_OF_WEEK);
//加上星期的偏移
int offdays = (week-1)*7+1;
//加上日期的偏移
offdays += weekday%7+1-xweekday;
//设置正确日期
dt.set(DATE,offdays);
//返回格式化后的数据
return df.format(dt.getTime());
}
}
第3个回答  2009-02-23
import java.text.*;
import java.util.*;

public class DateTest {

public static void main(String[] args) {
SimpleDateFormat sf1 = new SimpleDateFormat("yyyy年-MM月-w周-dd号");
SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd");
Date date = Calendar.getInstance().getTime();
String d1 = sf1.format(date);
System.out.println(d1);
// 只要指定d1就可以进行转换了!
//d1 = "2009年-02月-9周-23号";
Date date2 = null;
try {
date2 = (Date)sf1.parse(d1);
} catch (ParseException e) {

e.printStackTrace();
}
String d2 = sf2.format(date2);
System.out.println(d2);

}

}
第4个回答  2009-02-23
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Main {
public static void main(String args[]) {
Main main = new Main();
String str = main.getDateString(2009, 2, 3, 4);
System.out.println(str);
}

public String getDateString(int year, int month, int week, int day) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month-1); //因为月份是从0起算所以减一
cal.set(Calendar.WEEK_OF_MONTH, week);
cal.set(Calendar.DAY_OF_WEEK, day+1);//因为天数是从星期天算,所以加一
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(cal.getTime());
}
}
相似回答