如何在Android中获取两个日期之间的所有日期。
例如。我有两个字符串。
String first="2012-07-15";
String second="2012-07-21";
我转换并从这些字符串中获取日期。
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
DateFormat df2 = new SimpleDateFormat("MMM dd");
String mydate = df2.format(df1.parse(first));
这样我从第一个和第二个字符串中得到两个日期。
现在我还会显示这两个日期之间的所有日期。
答案 0 :(得分:33)
最好不要在日期计算中使用任何硬编码值。我们可以依靠java Calendar
类方法来完成这个任务
查看代码
private static List<Date> getDates(String dateString1, String dateString2)
{
ArrayList<Date> dates = new ArrayList<Date>();
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = null;
Date date2 = null;
try {
date1 = df1 .parse(dateString1);
date2 = df1 .parse(dateString2);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
while(!cal1.after(cal2))
{
dates.add(cal1.getTime());
cal1.add(Calendar.DATE, 1);
}
return dates;
}
并按以下方式使用
List<Date> dates = getDates("2012-02-01", "2012-03-01");
for(Date date:dates)
System.out.println(date);
答案 1 :(得分:1)
public class DummyWorks extends Activity
{
static final long ONE_DAY = 24 * 60 * 60 * 1000L;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getDatesBetween("03/23/2011","03/28/2011");
}
public static void getDatesBetween(String startDate,String endDate) {
long from=Date.parse(startDate);
long to=Date.parse(endDate);
int x=0;
while(from <= to) {
x=x+1;
System.out.println ("Dates : "+new Date(from));
from += ONE_DAY;
}
System.out.println ("No of Dates :"+ x);
}
}
答案 2 :(得分:1)
val currentDateCalendar = Calendar.getInstance()
val mCurrentDate = getDateChanger(currentDateCalendar.time, "yyyy-MM-dd")
currentDateCalendar.add(Calendar.MONTH, 1)
val oneMonthNextCalendar = currentDateCalendar
val mNextDate = getDateChanger(oneMonthNextCalendar.time, "yyyy-MM-dd")
val mDates = datesBetween(
mCurrentDate,
mNextDate,
"yyyy-MM-dd"
)
for (date in mDates)
Log.i("DatesBetween",date)
@SuppressLint("SimpleDateFormat")
fun getDateChanger(mDate:Date,formatter: String): String {
val dateFormat = SimpleDateFormat(formatter)
return dateFormat.format(mDate)
}
@SuppressLint("SimpleDateFormat")
fun datesBetween(startDate: String, endDate: String,formatter: String): List<String> {
val dates = ArrayList<String>()
val dateFormat: DateFormat = SimpleDateFormat(formatter)
var sDate: Date? = null
var eDate: Date? = null
try {
sDate = dateFormat.parse(startDate)
eDate = dateFormat.parse(endDate)
} catch (e: ParseException) {
e.printStackTrace()
}
val sCalendarDate = Calendar.getInstance()
sCalendarDate.time = sDate!!
val eCalendarDate = Calendar.getInstance()
eCalendarDate.time = eDate!!
while (!sCalendarDate.after(eCalendarDate)) {
dates.add(dateFormat.format(sCalendarDate.time))
sCalendarDate.add(Calendar.DATE, 1)
}
return dates
}
答案 3 :(得分:0)
Kotlin 中的解决方案: 它将返回 2 个日期之间的日期列表。
fun getDatesBetween(dateString1:String, dateString2:String):List<String> {
val dates = ArrayList<String>()
val input = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
var date1:Date? = null
var date2:Date? = null
try
{
date1 = input.parse(dateString1)
date2 = input.parse(dateString2)
}
catch (e:ParseException) {
e.printStackTrace()
}
val cal1 = Calendar.getInstance()
cal1.time = date1
val cal2 = Calendar.getInstance()
cal2.time = date2
while (!cal1.after(cal2))
{
val output = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
dates.add(output.format(cal1.time))
cal1.add(Calendar.DATE, 1)
}
return dates
}
答案 4 :(得分:0)
考虑使用 java.time(现代 Java 日期和时间 API)进行日期工作。 LocalDate
是用于日期的类(没有一天中的时间)。我假设您想要包含两个给定日期的所有日期。
String first = "2012-07-15";
String second = "2012-07-21";
List<LocalDate> dates = LocalDate.parse(first)
.datesUntil(LocalDate.parse(second).plusDays(1))
.collect(Collectors.toList());
System.out.println(dates);
输出:
<块引用>[2012-07-15, 2012-07-16, 2012-07-17, 2012-07-18, 2012-07-19, 2012-07-20, 2012-07-21]
LocalDate.datesUntil()
为我们提供了指定结束日期不包括的日期流,因此我们需要为其添加一天以将其包含在内。
我正在利用这样一个事实,即您的字符串采用 ISO 8601 格式,并且 LocalDate
将此格式解析为默认格式,即没有任何显式格式化程序。
如果由于某种原因您使用 ThreeTenABP 库而不是脱糖,我相信 datesUntil
方法不存在。在这种情况下,请改用循环。
List<LocalDate> dates = new ArrayList<>();
LocalDate currentDate = LocalDate.parse(first);
LocalDate lastDate = LocalDate.parse(second);
while (! currentDate.isAfter(lastDate )) {
dates.add(currentDate);
currentDate = currentDate.plusDays(1);
}
<块引用>
[2012-07-15, 2012-07-16, 2012-07-17, 2012-07-18, 2012-07-19, 2012-07-20, 2012-07-21]
java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少 Java 6。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向后移植到 Java 6 和 7(JSR-310 的 ThreeTen)。