Java 如何使用日历生成开始和结束时间?

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

我正在尝试使用日历获取我的开始时间和结束时间,这样我就可以相应地创建我的url。我需要将我的开始时间定为昨天午夜日期
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 );