Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取java中一周的第一个日期_Java_Date_Datetime_Calendar_Simpledateformat - Fatal编程技术网

获取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

我想取一周的第一个日期

我的输入将是字符串类型,如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.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”,也就是星期一。