Java:从日历中获取一周中的任何一天
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3890944/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java : Get any day in a week from Calendar
提问by Anubhav Anand
Using Calendar
I can get the week, year and all details for the current day. How can I navigate to a particualr day in that week?
使用Calendar
I 可以获得当天的周、年和所有详细信息。我如何导航到那一周的特定日期?
Say, calendar.get(Calendar.DAY_OF_WEEK);
returns 3, which means a Tuesday. Now, I want to go to say Friday for that week or any other day in that week. How can I do that?
比如说,calendar.get(Calendar.DAY_OF_WEEK);
返回 3,这意味着星期二。现在,我想说那个星期的星期五或那个星期的任何一天。我怎样才能做到这一点?
Thanks for your replies. I think I need to make the scenario more clear. Basically, I am trying to disable email alerts in my system during specified period. I get values like: disableStart = "FRIDAY-19:00" disableEnd = "SUNDAY-19:00"
感谢您的回复。我想我需要让场景更清晰。基本上,我试图在指定时间段内禁用系统中的电子邮件警报。我得到如下值: disableStart = "FRIDAY-19:00" disableEnd = "SUNDAY-19:00"
Now, i need to verify if email should be sent at a particular time. e.g. if today = Thursday any time, send email but, if today = Saturday any time can't send as per values above.
现在,我需要验证是否应该在特定时间发送电子邮件。例如,如果今天 = 星期四任何时间,都可以发送电子邮件,但是,如果今天 = 星期六任何时间都不能按照上述值发送。
采纳答案by Kevin D
If I understand correctly you can use the Calendar.set(Field, value) method.
如果我理解正确,您可以使用 Calendar.set(Field, value) 方法。
SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy");
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(f.format(c.getTime()));
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(f.format(c.getTime()));
Produces the output
产生输出
6
08-10-2010
3
05-10-2010
回答by jarnbjo
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
回答by Maurice Perry
Calendar c = Calendar.getInstance();
Date date = new Date();
c.setTime(date);
System.out.println("Today: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println("MONDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
System.out.println("TUESDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
System.out.println("WEDNESDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
System.out.println("THURSDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
System.out.println("FRIDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
System.out.println("SATURDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
System.out.println("SUNDAY: " + c.getTime());
Gives:
给出:
Today: Fri Oct 08 15:45:14 CEST 2010
MONDAY: Mon Oct 04 15:45:14 CEST 2010
TUESDAY: Tue Oct 05 15:45:14 CEST 2010
WEDNESDAY: Wed Oct 06 15:45:14 CEST 2010
THURSDAY: Thu Oct 07 15:45:14 CEST 2010
FRIDAY: Fri Oct 08 15:45:14 CEST 2010
SATURDAY: Sat Oct 09 15:45:14 CEST 2010
SUNDAY: Sun Oct 10 15:45:14 CEST 2010
Which seams to mean that, at least on my system, the weeks starts on monday.
这意味着,至少在我的系统上,星期从星期一开始。
回答by Anubhav Anand
Thanks to Kevin and Maurice for the answers. They really gave me the start point.
感谢 Kevin 和 Maurice 的回答。他们真的给了我一个起点。
I ended with this test code, in case it helps anyone.
我以这个测试代码结束,以防它对任何人有帮助。
private static Date getTimeForAnyDayInWeek(int nDay, int nHour, int nMin)
{
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
Date date = Calendar.getInstance().getTime();
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, nDay);
c.set(Calendar.HOUR_OF_DAY, nHour);
c.set(Calendar.MINUTE, nMin);
return c.getTime();
}
public static void main(String[] args)
{
Date start = getTimeForAnyDayInWeek(6, 19, 00);
Date end = getTimeForAnyDayInWeek(8, 19, 00);
Date c = new Date();
if (start.before(c) && c.before(end))
System.out.println("BLOCK");
else
System.out.println("SEND");
}
Thanks, Anubhav
谢谢,阿努巴夫
回答by NimChimpsky
This is a perfect example of why jodatimeis so good, here is my similar code
这是为什么jodatime如此出色的完美示例,这是我的类似代码
DateTime dt = new DateTime(); //current datetime, jodatime format
DateTime fridayLastWeek = dt.minusWeeks(1).dayOfWeek().setCopy("Friday");
Date convertedtorubbishdateformat = fridayLastWeek.toDate();
I used to waste so much time witht he standard java date/calendar. Then i got jodatime, you wont regret, it apparently will be used as part of standard java in the future. I didn;t bother downlaoding the jar for for ages, I wish I had done, you won't regret it.
我曾经在他的标准 Java 日期/日历上浪费了很多时间。然后我得到了 jodatime,你不会后悔,它显然将来会被用作标准 Java 的一部分。我很久没有费心下载罐子了,我希望我已经这样做了,你不会后悔的。