【发布时间】:2020-11-11 20:28:52
【问题描述】:
我很难在此处的代码中找到错误。当它应该有一个数字时,paytotal 出现 0。
firstDayOfPaycheck 是 2020 年 10 月 23 日的日期。
lastDayOfPaycheck 是 2020 年 11 月 6 日的日期。
我的简单日期格式sdf 是“MMM dd, yyyy”。
传递给 runPayroll 的字符串 dateInQuestion 是“2020 年 10 月 31 日”,它最初来自与上述相同的 sdf。
我是 java 新手,还没有处理过像这样操作日历的问题。感觉下面的代码应该可以了。
private void runPayroll(String dateInQuestion, long payForTask){
c.setTime(firstDayOfPaycheck);
//loop through days of paycheck. number from time.compareTo(time2) is negative while time is before time2
while(c.getTime().compareTo(lastDayOfPaycheck)<=0){
if(dateInQuestion != null) {
Date questionDate = sdf.parse(dateInQuestion, new ParsePosition(0));
if (c.getTime().compareTo(questionDate) == 0) {
payTotal += payForTask;
}
}
c.add(Calendar.DAY_OF_YEAR, 1);
}
} //ran inside the query to get the total pay
private void buildPayrollDash(){
String strPayrollAmt = "$" + payTotal;
String startDate = sdf.format(firstDayOfPaycheck);
String trimmedStart = startDate.split(",")[0]; //cuts out the year in the date
String endDate = sdf.format(lastDayOfPaycheck);
String trimmedEnd = endDate.split(",")[0];
int holdBack = sharedPreferences.getInt("payroll holdback", 7);
c.setTime(lastDayOfPaycheck);
c.add(Calendar.DAY_OF_YEAR, holdBack);
String payDate = sdf.format(c.getTime());
String trimmedPaydate = payDate.split(",")[0];
tvPayrollTimefame.setText("Pay from " + trimmedStart + " - " + trimmedEnd);
tvPayrollAmount.setText(strPayrollAmt + " due " + trimmedPaydate);
【问题讨论】:
-
你好,伙计。不再推荐使用 Calendar 类,因为它包含一些设计缺陷。推荐的工具现在位于 java.time 包中,例如 LocalDateTime。如果您要在两个日期之间进行测量,请查看 Period 类。
-
您可以找到关于 Period here 使用的 Java 教程。这应该可用于更简洁地计算您的代码当前尝试查找的天数。
-
谢谢蒂姆。我会切换到那个
-
既然你要切换到更好的 API,现在可能没关系,但你应该有created a Minimal, Reproducible Example。就你的问题而言,我不知道出了什么问题,坦率地说,我怀疑任何人都可以。所以请回答你的下一个问题。