She*_*ila 2 java datediff date-difference
我对 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 = "";
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();
String days = ""+(diff / (24 * 60 * 60 * 1000));
timeDiff = days;
timeDiff = timeDiff.replaceAll("-", "");
timeDiff = timeDiff+" days";
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return timeDiff;
}
Run Code Online (Sandbox Code Playgroud)
public static String getDatesDiffAsDate(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();
String days = (diff / (24 * 60 * 60 * 1000))+" days";
String hours = (diff / (60 * 60 * 1000) % 24)+"h";
String minutes = (diff / 1000 % 60)+"mts";
String seconds = (diff / (60 * 1000) % 60)+"sec";
timeDiff = days;
timeDiff = timeDiff.replaceAll("-", "");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return timeDiff;
}
Run Code Online (Sandbox Code Playgroud)
这段代码从根本上被破坏了。java.util.Date不代表日期,它代表时间戳。但如果你处理的是时间上的时刻,你就会遇到一个问题:并不是所有的日子都是 24 小时。例如,实行夏令时,某些日子为 25 或 23 小时。在地球上特定地点的特定时刻,整个日子都会被跳过,例如当一个地方改变了国际日期变更线的哪一侧时,或者当俄罗斯最后一个从儒略历转换为公历时(著名的十月)革命?是的,这实际上发生在 11 月!)
使用LocalDate它代表实际日期,而不是时间戳。不要使用Date, 或SimpleDateFormat\xe2\x80\x93 这些已经过时并且大部分都破坏了日期和时间。这java.time方案是经过深思熟虑的。
“周末”是什么时候?在某些地方,周五和周六被视为周末,而不是周六和周日。
\n如果您排除周末,那么您可能还想排除法定假期。许多国家规定,1 月 1 日,无论是哪一天,都算作星期日,例如,无论政府建筑和服务是否开放。
\n您需要从中吸取的教训:
\njava.util.Date、Calendar、GregorianCalendar或SimpleDateFormat, 。使用中的东西java.time代替。ChronoUnit.DAYS.between(date1, date2)为你做了所有的数学。throws X如果您现在不想处理它,请添加,或者,输入throw new RuntimeException("unhandled", e);,或者放入您的 catch 块。不是这个,这个太可怕了。它记录了一半的错误,并盲目地继续前进,状态无效。