date - 在 Kotlin 中计算日期
问题描述
下面的代码效果很好我试图弄清楚一旦选择了日期,如何计算总天数。太感谢了。
我要解决的问题: 选择假期开始日期 - 日期选择器 - 这部分效果很好 选择假期结束日期 - 日期选择器 - 这部分效果很好 总天数 = 计算结束日期 - 开始日期 - 我不知道如何进行计算 总计 10 天
这是我的代码
class VacationActivity : AppCompatActivity() {
private var selectedYear = 0
private var selectedMonth = 0
private var selectedDay = 0
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_vacation)
// get view
val tvDate = findViewById<TextView>(R.id.from_date_view)
tvDate.setOnClickListener {
val currentDate = Calendar.getInstance()
val year = currentDate.get(Calendar.YEAR)
val month = currentDate.get(Calendar.MONTH)
val day = currentDate.get(Calendar.DAY_OF_MONTH)
if (tvDate.text.isNotEmpty()) {
this.selectedYear
this.selectedMonth
this.selectedDay
}
var listener = DatePickerDialog.OnDateSetListener { view, selectedYear, selectedMonth, selectedDay ->
this.selectedYear = selectedYear
this.selectedMonth = selectedMonth
this.selectedDay = selectedDay
tvDate.text = "${selectedMonth + 1}/$selectedDay/$selectedYear"
}
val datePicker = DatePickerDialog(this, listener, year, month, day)
datePicker.show()
}
val tvDate2 = findViewById<TextView>(R.id.to_date_view)
tvDate2.setOnClickListener {
val currentDate = Calendar.getInstance()
val year = currentDate.get(Calendar.YEAR)
val month = currentDate.get(Calendar.MONTH)
val day = currentDate.get(Calendar.DAY_OF_MONTH)
if (tvDate2.text.isNotEmpty()) {
this.selectedYear
this.selectedMonth
this.selectedDay
}
var listener = DatePickerDialog.OnDateSetListener { view, selectedYear, selectedMonth, selectedDay ->
this.selectedYear = selectedYear
this.selectedMonth = selectedMonth
this.selectedDay = selectedDay
tvDate2.text = "${selectedMonth + 1}/$selectedDay/$selectedYear"
}
val datePicker = DatePickerDialog(this, listener, year, month, day)
datePicker.show()
}
}
}
解决方案
您可以使用以下功能:
fun getLocalDateFromString(d: String, format: String): LocalDate {
return LocalDate.parse(d, DateTimeFormatter.ofPattern(format))
}
它LocalDate
从d
格式为format
.
fun getDaysDif(fromDate: LocalDate, toDate: LocalDate): Long {
return ChronoUnit.DAYS.between(fromDate, toDate)
}
它返回 2 个日期之间的天数差 ( LocalDate
)
所以你可以这样做:
val days = getDaysDif(
getLocalDateFromString(tvDate1.text, "MM/dd/yyyy"),
getLocalDateFromString(tvDate2.text, "MM/dd/yyyy"))
上面的代码适用于 API 级别 26 及以上。
对于较低版本,请使用:
val format = SimpleDateFormat("MM/dd/yyyy")
val days = TimeUnit.DAYS.convert(
format.parse(tvDate2.text).getTime() -
format.parse(tvDate1.text).getTime(),
TimeUnit.MILLISECONDS)
推荐阅读
- c# - .NET Core 3.1 中是否存在 HTTPResponse 响应
- c# - Xamarin 为选定项目形成全局变量
- delphi - Delphi:从二进制表示中定义 const double
- python - 使用 elementree,lxml - 唯一适用于 findall 的 (.//) 通配符 - 不能使用相对路径?
- java - 自定义正则表达式 - 输入验证
- continuous-integration - 为什么我的 .gitlab-ci.yml 在纱线测试中不断失败,并出现错误“/bin/sh: 1: react-scripts: not found”?
- numpy - 如何重载 & (and) 子句过滤 Numpy 数组?
- android-studio - 我的 iPhone 不会出现在 Android Studio 的“执行列表”中
- python - 在 Python 3d 曲面图中绘制概率密度函数
- javascript - 编写 JS 异步/等待代码并有条件地进行的最佳方式