Java 如何使用日历生成开始和结束时间?
我正在尝试使用日历获取我的开始时间和结束时间,这样我就可以相应地创建我的url。我需要将我的开始时间定为昨天午夜日期Java 如何使用日历生成开始和结束时间?,java,calendar,date-format,Java,Calendar,Date Format,我正在尝试使用日历获取我的开始时间和结束时间,这样我就可以相应地创建我的url。我需要将我的开始时间定为昨天午夜日期2014/09/19 00:00和今天午夜日期的结束时间2014/09/20 00:00 因此,每当我运行我的程序时,它都应该生成我的开始时间,如昨天午夜时间,结束时间,如我的程序运行时的午夜时间 我有下面的代码,但如果我现在运行我的程序,则开始时间为2014/09/20 00:00,结束时间为2014/09/20 16:00 private static final DateFo
2014/09/19 00:00
和今天午夜日期的结束时间2014/09/20 00:00
因此,每当我运行我的程序时,它都应该生成我的开始时间,如昨天午夜时间,结束时间,如我的程序运行时的午夜时间
我有下面的代码,但如果我现在运行我的程序,则开始时间为2014/09/20 00:00
,结束时间为2014/09/20 16:00
private static final DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm");
Calendar startDate = new GregorianCalendar();
startDate.set(Calendar.MINUTE, 0);
Calendar endDate = (Calendar) startDate.clone();
startDate.set(Calendar.HOUR_OF_DAY, 0);
String startTime = df.format(startDate.getTime());
String endTime = df.format(endDate.getTime());
我做错什么了吗?试试下面的方法
Calendar startDate = new GregorianCalendar();
startDate.set(Calendar.MINUTE, 0);
startDate.set(Calendar.HOUR_OF_DAY, 0);
startDate.add(Calendar.DAY_OF_MONTH, -1);
String startTime = df.format(startDate.getTime());
System.err.println(startTime);
Calendar endDate = (Calendar) startDate.clone();
endDate.add(Calendar.DAY_OF_MONTH, 1);
String endTime = df.format(endDate.getTime());
System.err.println(endTime);
它应该完成这项工作(2014/09/21 01:50):
一天并不总是从00:00:00开始
问题和另一个答案都假设一天的第一个时刻(“午夜”)是00:00:00.000。由于夏令时和其他可能的异常情况,不总是正确的
时区
问题和另一个答案都忽略了时区的问题。确定日期取决于时区。通常最好明确指定预期的时区
乔达时间
下面是一些使用2.4库回答问题的示例代码,同时解决上面列出的两个问题
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( timeZone );
DateTime todayStart = now.withTimeAtStartOfDay();
DateTime tomorrowStart = now.plusDays( 1 ).withTimeAtStartOfDay();
另外,Joda Time有三个类来表示时间跨度:Interval、Period和Duration
Interval today = new Interval( todayStart, tomorrowStart );
将小时、分钟和秒设置为0汉克斯克拉。在我的情况下,应该是相反的,开始时间我得到的是
2014/09/20 00:00
,但应该是2014/09/19 00:00
,因为我今天的日期是9月20日,结束时间我得到的是2014/09/21 00:00
,但应该是2014/09/20 00:00
Interval today = new Interval( todayStart, tomorrowStart );