获取java中一周的第一个日期
我想取一周的第一个日期 我的输入将是字符串类型,如07/26/2014” 我需要获得上述日期(2014年7月26日)所在周的第一个日期 我需要输出日期为MM/dd/YYYY格式 基本上我需要2014年7月21日的输出 请给我java程序。我已经完成了获取java中一周的第一个日期,java,date,datetime,calendar,simpledateformat,Java,Date,Datetime,Calendar,Simpledateformat,我想取一周的第一个日期 我的输入将是字符串类型,如07/26/2014” 我需要获得上述日期(2014年7月26日)所在周的第一个日期 我需要输出日期为MM/dd/YYYY格式 基本上我需要2014年7月21日的输出 请给我java程序。我已经完成了 SimpleDateFormat formatter1 = new SimpleDateFormat("MM/dd/yy"); String date ="07/26/2014"; Date Currentdate = formatter1
SimpleDateFormat formatter1 = new SimpleDateFormat("MM/dd/yy");
String date ="07/26/2014";
Date Currentdate = formatter1.parse(date);
int currentday=Currentdate.getDay();
Calendar calendar = Calendar.getInstance();
calendar.setTime(Currentdate);
int startDay=currentday-calendar.getFirstDayOfWeek();
Currentdate.setDate(contacteddate.getDate()-startDay);
System.out.println(contacteddate.getDate());
}
上面的代码只给出了日期。我需要日期以及“MM/dd/YYYY”中的月份和年份
将时间设置为后,请提供帮助
使用
然后
simpleFormat.format(calendar.getTime());
这对你有帮助
// Get calendar set to current date and time
Calendar c = Calendar.getInstance();
// Set the calendar to monday of the current week
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
// Print dates of the current week starting on Monday
DateFormat df = new SimpleDateFormat("EEE dd/MM/yyyy");
for (int i = 0; i < 1; i++) {
System.out.println(df.format(c.getTime()));
c.add(Calendar.DATE, 1);
}
//将日历设置为当前日期和时间
Calendar c=Calendar.getInstance();
//将日历设置为当前周的星期一
c、 设置(Calendar.DAY\u OF_WEEK,Calendar.MONDAY);
//打印从星期一开始的当前星期的日期
DateFormat df=新的简化格式(“EEE dd/MM/yyyy”);
对于(int i=0;i<1;i++){
System.out.println(df.format(c.getTime());
c、 添加(日历日期,1);
}
我会这样做
Calendar calendar = Calendar.getInstance();
calendar.setTime(Currentdate);
calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
到目前为止,所有提供的解决方案的问题不是指定周定义的确切内容。周定义要么像ISO-8601-standard(星期一为一周的第一天,一年的第一个日历周至少包含四天)那样在技术上指定,要么使用本地化规则(例如,在美国,一周从周日开始!) 由于OP要求将“07/21/2014”作为“07/26/2014”前后的第一天,因此似乎ISO-8601才是OP真正想要的
Calendar calendar = Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
...
在美国这样的国家或位于美国的应用程序服务器上不起作用。反例:
// simulating a US-located application server where this code is running
GregorianCalendar calendar = new GregorianCalendar(Locale.US);
calendar.set(2014, Calendar.JULY, 26);
calendar.getTime(); // avoid ugly side effects in calendar date handling
calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(calendar.getTime())); // output: 2014-07-20
如果OP将choosen区域设置更改为locale.FRANCE
(应用ISO规则),则OP可以使用传统的Java日期和时间库实现其目标
但是应该注意的是,使用java.util.Calendar
-工具进行周处理通常是令人困惑和困难的。例如:如果没有奇怪的getter调用(Calendar.getTime()
),强制更新内部计算,结果将是:2014-07-06(肯定不是OP想要的)
因此,我建议以下其他库选择与不同周定义兼容的通用方法:
a)(内置库JSR-310又名java.time):
LocalDate date = LocalDate.of(2014, 7, 26);
TemporalField dowField = WeekFields.ISO.dayOfWeek();
date = date.with(dowField, dowField.range().getMinimum());
System.out.println(date); // output: 2014-07-21
PlainDate date = PlainDate.of(2014, 7, 26);
date = date.with(Weekmodel.ISO.localDayOfWeek().minimized());
System.out.println(date); // output: 2014-07-21
// Java-8 applying ISO-8601-rules
LocalDate date = LocalDate.of(2014, 7, 26);
date = date.with(DayOfWeek.MONDAY);
// Joda-Time
LocalDate date = new LocalDate(2014, 7, 26);
date = date.dayOfWeek().withMinimumValue();
注意:避免使用类似date.with(DayOfWeek.MONDAY)的代码,因为在这种情况下,java.time-library无法评估可能偏离ISO-8601的基本周规则(此处选择:WeekFields.ISO
,但也可能是WeekFields.SUNDAY\u START
)
b)我自己的图书馆:
LocalDate date = LocalDate.of(2014, 7, 26);
TemporalField dowField = WeekFields.ISO.dayOfWeek();
date = date.with(dowField, dowField.range().getMinimum());
System.out.println(date); // output: 2014-07-21
PlainDate date = PlainDate.of(2014, 7, 26);
date = date.with(Weekmodel.ISO.localDayOfWeek().minimized());
System.out.println(date); // output: 2014-07-21
// Java-8 applying ISO-8601-rules
LocalDate date = LocalDate.of(2014, 7, 26);
date = date.with(DayOfWeek.MONDAY);
// Joda-Time
LocalDate date = new LocalDate(2014, 7, 26);
date = date.dayOfWeek().withMinimumValue();
<强> c)如果你事先知道你只想要ISO-8601-周长规则,那么你也可以在Java8中考虑一个更简单的方法,或者代替它的前身:< /强>
LocalDate date = LocalDate.of(2014, 7, 26);
TemporalField dowField = WeekFields.ISO.dayOfWeek();
date = date.with(dowField, dowField.range().getMinimum());
System.out.println(date); // output: 2014-07-21
PlainDate date = PlainDate.of(2014, 7, 26);
date = date.with(Weekmodel.ISO.localDayOfWeek().minimized());
System.out.println(date); // output: 2014-07-21
// Java-8 applying ISO-8601-rules
LocalDate date = LocalDate.of(2014, 7, 26);
date = date.with(DayOfWeek.MONDAY);
// Joda-Time
LocalDate date = new LocalDate(2014, 7, 26);
date = date.dayOfWeek().withMinimumValue();
请注意,这取决于给定地区的第一天是什么。对于美国人来说,
07/26/2014
的答案将是第20天,而不是第21天。这只是需要考虑的一点。因为这不是一个Android问题,它不是该问题的重复。并且是and.I t的重复hink OP想要星期一,而不是星期天=1。您的代码在美国提前一天生成。@Meno每周第一天取决于您设置的区域设置是的,我知道,每周第一天取决于区域设置。但可能我不太清楚。我参考了行calendar.set(calendar.day\u of u week,1)
。数字1代表固定的日历。星期日
。OP想要的是“07/21/2014”,也就是星期一。