我正在添加这个问题,因为我是Java和Android的新手,我搜索了几个小时试图解决这个问题.答案来自相关答案的组合,所以我想我会记录我为其他可能正在努力的人学到的东西.见答案.
对于一些背景知识,我的经验主要是PHP的Web开发和一点Ruby.我唯一的操作系统是Linux(Ubuntu Studio),我(不情愿地)在Android Studio 2.1.2中开发我的第一个Android应用程序.我的Java设置如下:
>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Run Code Online (Sandbox Code Playgroud) datetime android android-gradle-plugin threetenbp threetenabp
如何在Java中将当前日期添加到工作日?
public Calendar addBusinessDate(Calendar cal, int days) {
//
// code goes over here
//
}
Run Code Online (Sandbox Code Playgroud)
它也应该考虑周末.
下面我有3种方法.第一个很简单.它只计算总天数.但是,第二个不仅会计算天数,还会忽略传递给方法的星期几.
我的问题是第三种方法并不总是正确的.它应该匹配第二种方法.我猜它与闰年有关,因为当它不正确时差异通常为+ = 3 | 4.
我试图以weekday(serial_number,[return_type])某种方式模拟Excel的公式.
serial_number = startDate:Date - daysOfWeekToInclude:Array<Integer>
Run Code Online (Sandbox Code Playgroud)
| A | B | C
+---------+----------------------------------------------------+-----------
1 | Start | =DATE(2014,9,7) | 9/7/2014
2 | End | =DATE(2025,6,13) | 6/13/2025
3 | Include | ={1,2,4,6} (Mon, Tue, Thu, & Sat) | <Disp Only>
4 | Days | =SUM(INT((WEEKDAY($B$1-{1,2,4,6},1)+$B$2-$B$1)/7)) | 2248
Run Code Online (Sandbox Code Playgroud)
这里有关于此功能的更多信息:如何计算/计算Excel中两个日期之间的天数?

只需计算两个日期之间的天数.
public static int simpleDaysBetween(final LocalDate start,
final LocalDate end) {
return (int) ChronoUnit.DAYS.between(start, end);
}
Run Code Online (Sandbox Code Playgroud)使用循环计算天数,忽略一周中的某些天.
public static …Run Code Online (Sandbox Code Playgroud)我需要计算两个日期之间的工作日.例如:我们7月4日有假期(在美国).所以,如果我的日期是date1 = 07/03/2012 date2 = 07/06/2012
没有工作日b/w这些日期应该是1,因为7月4日是假日.
我有一个下面的方法来计算工作日,这只会计算周末而不是假期.有没有办法计算假期....请帮我这个.
public static int getWorkingDaysBetweenTwoDates(Date startDate, Date endDate) {
Calendar startCal;
Calendar endCal;
startCal = Calendar.getInstance();
startCal.setTime(startDate);
endCal = Calendar.getInstance();
endCal.setTime(endDate);
int workDays = 0;
//Return 0 if start and end are the same
if (startCal.getTimeInMillis() == endCal.getTimeInMillis()) {
return 0;
}
if (startCal.getTimeInMillis() > endCal.getTimeInMillis()) {
startCal.setTime(endDate);
endCal.setTime(startDate);
}
do {
startCal.add(Calendar.DAY_OF_MONTH, 1);
if (startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
&& startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
++workDays;
}
} while (startCal.getTimeInMillis() < endCal.getTimeInMillis());
return workDays;
}
Run Code Online (Sandbox Code Playgroud) 我的要求是计算给定两个日期之间的天数,不包括星期六和星期日.
例:
Start date - 10/09/15 and End date 18/09/15
Result: 7
Run Code Online (Sandbox Code Playgroud)
日期DD/MM/YY格式.
码:
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
public class DaysCounter {
private String startDate;
private String endDate;
public void calculateDate(){
@SuppressWarnings("resource")
Scanner in=new Scanner(new InputStreamReader(System.in));
System.out.println("Enter the starting date (DD/MM/YY) :");
startDate=in.next();
System.out.println("Enter the End date (DD/MM/YY) :");
endDate=in.next();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try
{
Calendar start = Calendar.getInstance();
start.setTime(sdf.parse(startDate));
Calendar end = Calendar.getInstance();
end.setTime(sdf.parse(endDate));
int …Run Code Online (Sandbox Code Playgroud) 嗨,我尝试这段代码有几天的工作(包括周末),所以我怎么能在两个日期之间排除周末?
public long getDifferenceDays(Date d1, Date d2) {
long diff = d2.getTime() - d1.getTime();
long diffDays = diff / (24 * 60 * 60 * 1000);
return diffDays;
}
Run Code Online (Sandbox Code Playgroud) StartDate: 2016-05-8 20:16:00;
EndDate: 2016-05-30 20:16:00;
public int saturdaysundaycount(Date d1, Date d2) {
Calendar c1 = Calendar.getInstance();
c1.setTime(d1);
Calendar c2 = Calendar.getInstance();
c2.setTime(d2);
int sundays = 0;
int saturday = 0;
while (c1.after(c2)) {
if (c2.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || c2.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
sundays++;
saturday++;
c2.add(Calendar.DATE, 1);
c2.add(Calendar.DATE, 1);
}
System.out.println(sundays);
return saturday + sundays;
}
Run Code Online (Sandbox Code Playgroud)
在这个函数中,我试图获取两个日期之间周六和周日的总数。但是当我通过日期时,结果为零。请指出错误并提出更正建议。
我需要计算两个给定日期之间的工作日数
我将假期列表作为用户提供的数组列表。
因此,我可以调查日期之间的每一天,并检查它是否是工作日而不是联邦假日,如我在下面提供的代码(工作正常)
但这非常昂贵,假设有 12 个联邦假期,每天我都必须检查它不是周末,
所以如果我需要在 5 年之间计数,则需要 365 * 5 * 12 及其 21,000 次迭代!太疯狂了(甚至不包括工作日的计算)
有更好的方法吗?
package test;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.time.DateUtils;
public class TestDiff {
public static void main(String[] args) throws ParseException {
DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
// add 4 years as an example
Date fromDate = formatter.parse("11/06/2017"),toDate = formatter.parse("11/29/2017");// DateUtils.addDays(fromDate,365 * 4);
int numberOfDaysCount=0;
int daysBetween = daysBetween(fromDate,toDate);
Date caurDate = fromDate;
for(int …Run Code Online (Sandbox Code Playgroud) 我正在尝试禁用日历中的星期六和星期日。首先,我必须找到它。我尝试过,但无法获取。我在这里发布了代码。
public int countWeekendDays() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.DATE+1);
int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int count = 0;
for (int day = 1; day <= daysInMonth; day++) {
calendar.set(Calendar.DAY_OF_WEEK, Calendar.DATE+1, day);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) {
if(dayOfWeek==Calendar.SUNDAY)
calendar.add(Calendar.DATE, Calendar.SUNDAY-1);
else if(dayOfWeek==Calendar.SATURDAY)
calendar.add(Calendar.DATE, Calendar.SATURDAY);
disable.add(calendar.getTime());
}
}
for(int i=0;i<disable.size();i++)
{
Log.e("***&***",disable.get(i).toString());
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
我需要获取当前月的星期六和星期日(说:Aug),但是我得到的结果是前一个月,即7月。
我对 Java 平台非常初学者和陌生。我有以下 3 个简单的 Java 日期差计算函数。我想在所有 3 种方法中排除以下计算中的周末。任何人都可以帮助如何在以下 dateDiff 计算中排除周末吗?
public static String getDatesDiff(String date1, String date2) {
String timeDiff = "";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(date1);
d2 = format.parse(date2);
long diff = d2.getTime() - d1.getTime();
timeDiff = ""+diff;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return timeDiff;
}
Run Code Online (Sandbox Code Playgroud)
public static String getDatesDiffAsDays(String date1, String date2) {
String timeDiff = ""; …Run Code Online (Sandbox Code Playgroud) 我试图找到两个日期之间的工作日计数(周末和时间必须忽略).我正在使用以下功能来做到这一点.但它给出了多种情况的错误结果,例如,如果startdate是周末还是enddate是周末.这是一个演示的例子,可以计算一天额外的一天.
2018-03-08 00:00:00.0和2018-04-22 01:37:29.887
计数返回32(应该是31,它也在考虑23-04-2018).请提供一些完美的解决方案/方法来做同样的事情.
private static int calculateDuration(Date startDate, Date endDate)
{
Calendar startCal = Calendar.getInstance();
startCal.setTime(startDate);
startCal.set( Calendar.HOUR_OF_DAY, 0 );
startCal.set( Calendar.MINUTE, 0 );
startCal.set( Calendar.SECOND, 0 );
startCal.set( Calendar.MILLISECOND, 0 );
Calendar endCal = Calendar.getInstance();
endCal.setTime(endDate);
endCal.set( Calendar.HOUR_OF_DAY, 0 );
endCal.set( Calendar.MINUTE, 0 );
endCal.set( Calendar.SECOND, 0 );
endCal.set( Calendar.MILLISECOND, 0 );
int workDays = 0;
if (startCal.getTimeInMillis() > endCal.getTimeInMillis())
{
startCal.setTime(endDate);
endCal.setTime(startDate);
}
do
{
startCal.add(Calendar.DAY_OF_MONTH, 1);
System.out.println("************"+Calendar.DAY_OF_WEEK);
System.out.println("Before weekend condition"+Calendar.DAY_OF_WEEK+"Workdays="+workDays);
if (startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && …Run Code Online (Sandbox Code Playgroud) 更多细节我想摆脱一周的特定日子.
我的意思是:{星期六(1),星期日(2),星期一(3),星期二(4),星期三(5),星期四(6),星期五(7)}.
删除周日:{周六(1),周日(2),周一(3),周二(4),周三(5)}.
因此,我可以获得从特定开始日期到现在的排除天数的天数.
提示:我必须使用Java日历
*****问题是动态指定日期
java ×11
date ×5
android ×2
datetime ×2
weekday ×2
algorithm ×1
calendar ×1
date-range ×1
datediff ×1
java-8 ×1
java-time ×1
performance ×1
php ×1
threetenabp ×1
threetenbp ×1