让我解释一下自己。通过了解周数和日期年份:
Date curr = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(curr);
int nweek = cal.WEEK_OF_YEAR;
int year = cal.YEAR;
但现在我不知道如何获得该周第一天的日期。我一直在寻找日历,日期,日期格式,但没有什么可能有用...
有什么建议吗? (在Java工作)
答案 0 :(得分:39)
这些字段不返回值。这些是常量,它标识了Calendar
对象中可以获取/设置/添加的字段。要实现您想要的效果,首先需要获得Calendar
,清除它并设置已知值。它会自动将日期设置为该周的第一天。
// We know week number and year.
int week = 3;
int year = 2010;
// Get calendar, clear it and set week number and year.
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.WEEK_OF_YEAR, week);
calendar.set(Calendar.YEAR, year);
// Now get the first day of week.
Date date = calendar.getTime();
请学会阅读 javadocs以了解如何使用类/方法/字段,不要试图在IDE中随机选择;)
也就是说,java.util.Date
和java.util.Calendar
是epic failures。如果可以,请考虑切换到Joda Time。
答案 1 :(得分:3)
试试这个:
public static Calendar setWeekStart(Calendar calendar) {
while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
calendar.add(Calendar.DATE, -1);
}
setDayStart(calendar); // method which sets H:M:S:ms to 0
return calendar;
}
答案 2 :(得分:2)
我在Java中没有做太多日期的东西,但解决方案可能是:
cal.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_WEEK));
逻辑:
获取当天的日期并从当前日期减去它(可能需要-1,具体取决于你需要星期一作为一周的第一天或星期日)
答案 3 :(得分:1)
又一种方式......
GregorianCalendar cal = new GregorianCalendar();
cal.clearTime();
Integer correction = 1-cal.get(GregorianCalendar.DAY_OF_WEEK)
cal.add(Calendar.DATE, correction);
cal现在是一周的第一天
1-cal.get(GregorianCalendar.DAY_OF_WEEK)
评估为星期日(我的语言环境中的第一天)和星期一的1-2,所以这将为您提供将时钟倒回到星期日所需的更正
答案 4 :(得分:0)
这是一些快速而脏的代码。此代码创建一个日历对象,其中包含当天的日期,计算当前的星期几,并减去星期几,以便您在第一天(星期日)。虽然我正在使用DAY_OF_YEAR,但它经历了多年的罚款(在1/2/10,它将在12月27日返回,这是正确的。)
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DOW {
public static void main(String[] args) {
DOW dow = new DOW();
dow.doIt();
System.exit(0);
}
private void doIt() {
Date curr = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(curr);
int currentDOW = cal.get(Calendar.DAY_OF_WEEK);
cal.add(Calendar.DAY_OF_YEAR, (currentDOW * -1)+1);
Format formatter = new SimpleDateFormat("MM/dd/yy");
System.out.println("First day of week="+formatter.format(cal.getTime()));
}
}
答案 5 :(得分:0)
谨慎对待,calendar.get(Calendar.WEEK_OF_YEAR)
如果是12月底则返回1,并且已经是明年结束的一周。
使用
// cal2.set(Calendar.WEEK_OF_YEAR, cal.get(Calendar.WEEK_OF_YEAR));
// cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
将cal2日期设置为例如2009年底29/12/2010 !!
我用过这个:
cal2.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR)); //to round at the start of day
cal2.set(Calendar.YEAR, cal.get(Calendar.YEAR));
cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //to round at the start of week
我还要确保我的日历中的周数,无论他们在哪个地方,都在星期一开始:
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal2.setFirstDayOfWeek(Calendar.MONDAY);
答案 6 :(得分:0)
尝试格里高利历法算法:
public int getFirstDay(int m, int year)
{
int k=1;
int c, y, w, M=0;
if(m>2 && m<=12) M=m-2;
else if(m>0 && M<=2)
{
M=m+10;
year-=1;
}
c=year/100;
y=year%100;
w=(int)((k+(Math.floor(2.6*M - 0.2))-2*c+y+(Math.floor(y/4))+(Math.floor(c/4)))%7);//a fantastic formula
if(w<0) w+=7;
return w;//thus the day of the week is obtained!
}