得到周日吸气

时间:2015-07-29 15:45:17

标签: java

我希望在两个日期之间获得工作日,返回类型应为字符串数组,其中包括工作日(''星期日","星期一" ... .etc)请你帮我解释一下这个问题。我不知道这个

根据我的问题,我希望在开始日期结束日期之间获得工作日,如下所示

SimpleDateFormat myFormat = new SimpleDateFormat("dd/MM/yyyy");
    String startDate="01/07/2015";
    String endDate="31/07/2015";
    try {
        Date sDate=myFormat.parse(startDate);
        Date eDate=myFormat.parse(endDate);


    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

3 个答案:

答案 0 :(得分:1)

首先,尝试找出开始日期和结束日期之间的天数差异:

SELECT 'TRUNCATE TABLE ' + TABLE_SCHEMA + '.' + TABLE_NAME + '; INSERT INTO ' + TABLE_SCHEMA + '.' + TABLE_NAME + 
' SELECT * FROM <TestServer>.<TestDB>.' + TABLE_SCHEMA + '.' + TABLE_NAME + ';' 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'

然后,您可以找到您的间隔开始的星期几:

long startTime = sDate.getTime();
long endTime = eDate.getTime();
long differenceMillis = endTime - startTime;
// divide by the number of millis per day
int differenceInDays = Math.ceil((double) differenceMillis / MILLIS_PER_DAY);

在获得一周的开始日期和日期之间的差异后,您可以循环并将相应的值添加到结果列表中:

Calendar startCal = Calendar.getInstance();
startCal.setTime(sDate);
// if you need to skip the actual start day from the interval, add a day to the calendar
int dayOfWeek = startCal.get(DAY_OF_WEEK);

这应该是您需要遵循的基本步骤。代码只是一个示例,您可以优化和调整它以使用最佳实践。

编辑:修复了for循环中的一个错误 - List<String> days = new LinkedList<>(); for (int i = 0; i < differenceInDays; i++) { dayOfWeek++; if (7 < dayOfWeek) { // if we have reached the last day of the week, we reset to the first day of the week dayOfWeek = 1; } switch (dayOfWeek) { case Calendar.SATURDAY: days.add("Saturday"); break; // add other cases here } } 应该在每次迭代时加1,而不是dayOfWeek。现在它应该工作正常。

答案 1 :(得分:0)

private void generateDays() {

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    List<String> weekDays = new ArrayList<String>();

    try {
        Date parse = sdf.parse("01/07/2015");
        Date parse2 = sdf.parse("31/07/2015");

        long start = parse.getTime();
        long stop = parse2.getTime();

        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(start);

        for (int i = 0; c.getTimeInMillis() <= stop; i++) {
            String date = getDate(c.getTimeInMillis(), "EEEE");
            weekDays.add(date);
            Log.d("xxx", (i + 1) + " " + date);
            c.add(Calendar.DAY_OF_MONTH, 1);
        }

    } catch (ParseException e) {
        e.printStackTrace();
    }
}

public static String getDate(long milliSeconds, String dateFormat) {
    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(milliSeconds);
    return formatter.format(calendar.getTime());
}

答案 2 :(得分:0)

java.time

使用现代java.time类来取代麻烦的旧日期时间类。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate start = LocalDate.parse( "01/07/2015" , f );
LocalDate stop = LocalDate.parse( "31/07/2015" , f );

List<LocalDate> dates = new ArrayList<>( ChronoUnit.DAYS.between( start , stop ) + 1 );
LocalDate ld = start ;
while ( ! ld.isAfter( stop ) ) {
    dates.add( ld );
    // Set up next loop.
    ld = ld.plusDays( 1 );
}

要获取星期几名称的字符串,请使用DayOfWeek枚举及其本地化星期几名称的功能。

…
String output = ld.getDayOfWeek().getDisplayName( TextStyle.FULL_STANDALONE , Locale.US );  // Or Locale.CANADA_FRENCH etc.
…

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧日期时间类,例如java.util.Date.Calendar和&amp; java.text.SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6&amp; ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuarter等。