Java 获取两个日期之间的日期列表时出错
我尝试获取两个日期之间的日期列表。但是,列表中的所有值都是开始日期 比如说 日期:2017年10月6日 日期=2017年10月10日 ==>该列表的所有值均为日期(2017年10月6日) 预期------------------------------------------实际 日期[0]=2017年10月6日--------------------日期[0]=2017年10月6日 日期[1]=2017年10月7日--------------------日期[1]=2017年10月6日 日期[2]=2017年10月8日--------------------日期[2]=2017年10月6日 日期[3]=2017年10月9日--------------------日期[3]=2017年10月6日 日期[4]=2017年10月10日--------------------日期[4]=2017年10月6日 任何帮助都将不胜感激Java 获取两个日期之间的日期列表时出错,java,android,date,android-fragments,android-activity,Java,Android,Date,Android Fragments,Android Activity,我尝试获取两个日期之间的日期列表。但是,列表中的所有值都是开始日期 比如说 日期:2017年10月6日 日期=2017年10月10日 ==>该列表的所有值均为日期(2017年10月6日) 预期------------------------------------------实际 日期[0]=2017年10月6日--------------------日期[0]=2017年10月6日 日期[1]=2017年10月7日--------------------日期[1]=2017年10月6日 日期[
public class fragTable extends Fragment{
...
private String mdateFrom = "06-10-2017";
private String mdateTo = "10-10-2017";
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
List<String> dates = new ArrayList<String>();
dates = getDaysBetweenDates(stringToDaTe(mdateFrom),stringToDaTe(mdateTo));
}
public List<String> getDaysBetweenDates(Date startdate, Date enddate)
{
List<String> dates = new ArrayList<String>();
Calendar calendar = new GregorianCalendar();
calendar.setTime(startdate);
while (calendar.getTime().before(enddate))
{
Date result = calendar.getTime();
dates.add( datetoString(result));
calendar.add(Calendar.DATE, 1);
}
return dates;
}
//Convert String to Date
public Date stringToDaTe(String dateString)
{
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();
try {
date = sdf.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
//Convert Date to String
public String datetoString(Date date)
{
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
Date today = Calendar.getInstance().getTime();
String result = df.format(today);
return result;
}
}
公共类fragTable扩展片段{
...
专用字符串mdateFrom=“06-10-2017”;
专用字符串mdateTo=“10-10-2017”;
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
列表日期=新建ArrayList();
dates=日期之间的GetDays(stringToDaTe(mdateFrom),stringToDaTe(mdateTo));
}
公共列表GetDaysBetween日期(日期开始日期、日期结束日期)
{
列表日期=新建ArrayList();
日历=新的公历日历();
日历设置时间(起始日期);
while(calendar.getTime().before(enddate))
{
日期结果=calendar.getTime();
dates.add(datetoString(result));
calendar.add(calendar.DATE,1);
}
返回日期;
}
//将字符串转换为日期
公共日期stringToDaTe(字符串日期字符串)
{
SimpleDataFormat sdf=新的SimpleDataFormat(“dd-MM-yyyy”);
日期=新日期();
试一试{
date=sdf.parse(日期字符串);
}捕获(解析异常){
e、 printStackTrace();
}
返回日期;
}
//将日期转换为字符串
公共字符串datetoString(日期)
{
SimpleDataFormat df=新的SimpleDataFormat(“dd-MM-yyyy”);
Date today=Calendar.getInstance().getTime();
字符串结果=df.format(今天);
返回结果;
}
}
以下是获取两个日期之间的日期的代码
public class test {
private static String mdateFrom = "06-10-2017";
private static String mdateTo = "10-10-2017";
public static void main(String[] args) {
List<String> dates = getDaysBetweenDates(stringToDaTe(mdateFrom), stringToDaTe(mdateTo));
System.out.println(dates);
}
public static List<String> getDaysBetweenDates(Date startdate, Date enddate) {
List<String> dates = new ArrayList<String>();
Calendar calendar = new GregorianCalendar();
calendar.setTime(startdate);
while (calendar.getTime().before(enddate)) {
Date result = calendar.getTime();
dates.add(formatDate(result));
calendar.add(Calendar.DATE, 1);
}
return dates;
}
public static Date stringToDaTe(String dateString) {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();
try {
date = sdf.parse(dateString);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
public static String formatDate(Date result) {
String date = "";
DateFormat df = new SimpleDateFormat("dd-MM/yyyy");
date = df.format(result);
return date;
}
}
下面是获取两个日期之间的日期的代码
public class test {
private static String mdateFrom = "06-10-2017";
private static String mdateTo = "10-10-2017";
public static void main(String[] args) {
List<String> dates = getDaysBetweenDates(stringToDaTe(mdateFrom), stringToDaTe(mdateTo));
System.out.println(dates);
}
public static List<String> getDaysBetweenDates(Date startdate, Date enddate) {
List<String> dates = new ArrayList<String>();
Calendar calendar = new GregorianCalendar();
calendar.setTime(startdate);
while (calendar.getTime().before(enddate)) {
Date result = calendar.getTime();
dates.add(formatDate(result));
calendar.add(Calendar.DATE, 1);
}
return dates;
}
public static Date stringToDaTe(String dateString) {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();
try {
date = sdf.parse(dateString);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
public static String formatDate(Date result) {
String date = "";
DateFormat df = new SimpleDateFormat("dd-MM/yyyy");
date = df.format(result);
return date;
}
}
检查您的
dateToString
方法:
public String datetoString(Date date)
{
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
Date today = Calendar.getInstance().getTime();
String result = df.format(today); // <= You're actually formatting "today" date, not "date"
return result;
}
您的问题应该得到解决检查您的
日期字符串
方法:
public String datetoString(Date date)
{
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
Date today = Calendar.getInstance().getTime();
String result = df.format(today); // <= You're actually formatting "today" date, not "date"
return result;
}
在不知道如何打印输出的情况下,您的问题应该得到解决。我猜您使用的是
datetoString()
它有
Date today = Calendar.getInstance().getTime();
String result = df.format(today);
return result; // returns always today, not given date
也许它应该有
String result = df.format(date) // the input ;
return result;
在不知道如何打印输出的情况下,我猜您使用了
datetoString()
它有
Date today = Calendar.getInstance().getTime();
String result = df.format(today);
return result; // returns always today, not given date
也许它应该有
String result = df.format(date) // the input ;
return result;
推荐使用Java8
代码变得更加简单和轻量级,无需从字符串来回转换。此外,您还可以避免潜在的时区问题
public List<LocalDate> getDaysBetweenDates(Date startdate, Date enddate)
{
LocalDate dateFrom =stringToDaTe(mdateFrom).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate dateTo =stringToDaTe(mdateTo).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
long days = Duration.between(dateFrom.atStartOfDay(), dateTo.atStartOfDay()).toDays();
List<LocalDate> resultList= new ArrayList<LocalDate>();
long i=0;
do {
resultList.add(dateFrom);
dateFrom = dateFrom.plusDays(1);
i++;
} while (i < days+1);
return resultList;
}
public List getDaysbetween日期(日期开始日期、日期结束日期)
{
LocalDate dateFrom=stringToDaTe(mdateFrom).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate dateTo=stringToDaTe(mdateTo).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
长天数=持续时间.between(dateFrom.atStartOfDay(),dateTo.atStartOfDay()).toDays();
List resultList=new ArrayList();
长i=0;
做{
结果列表.add(dateFrom);
dateFrom=dateFrom.plusDays(1);
i++;
}而(i
建议使用java 8
代码变得更加简单和轻量级,无需从字符串来回转换。此外,您还可以避免潜在的时区问题
public List<LocalDate> getDaysBetweenDates(Date startdate, Date enddate)
{
LocalDate dateFrom =stringToDaTe(mdateFrom).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate dateTo =stringToDaTe(mdateTo).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
long days = Duration.between(dateFrom.atStartOfDay(), dateTo.atStartOfDay()).toDays();
List<LocalDate> resultList= new ArrayList<LocalDate>();
long i=0;
do {
resultList.add(dateFrom);
dateFrom = dateFrom.plusDays(1);
i++;
} while (i < days+1);
return resultList;
}
public List getDaysbetween日期(日期开始日期、日期结束日期)
{
LocalDate dateFrom=stringToDaTe(mdateFrom).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate dateTo=stringToDaTe(mdateTo).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
长天数=持续时间.between(dateFrom.atStartOfDay(),dateTo.atStartOfDay()).toDays();
List resultList=new ArrayList();
长i=0;
做{
结果列表.add(dateFrom);
dateFrom=dateFrom.plusDays(1);
i++;
}而(i
发布该错误,而不是datetoString是什么?您的问题不清楚,预期的输出是什么?您是否只希望日期介于开始日期和结束日期之间?使用此选项,您可以更轻松地执行此任务。发布此错误,而不是将日期设置为字符串?您的问题不清楚,预期的输出是什么?您是否只希望日期介于开始日期和结束日期之间?使用此选项,您可以更轻松地执行此任务。