我正在尝试为25到50年前的出生日期编写出生发生器的随机日期.我坚持使用Java 1.4并试图通过java.util.Calendar来实现这一点(是的,是的,我知道我应该使用Joda库).这是我在的地方:
private static long ONE_YEAR_AS_MILLISECONDS = 365*24*60*60*1000;
private static long TWENTY_FIVE_YEARS_AS_MILLISECONDS = 25*ONE_YEAR_AS_MILLISECONDS;
private static long FIFTY_YEARS_AS_MILLISECONDS = 50*ONE_YEAR_AS_MILLISECONDS;
private static String generateDOB()
{
//Equation for calculating a random number within a given range is as follows: Min + (int)(Math.random() * ((Max - Min) + 1))
long someTimeBetween25And50YearsInMilliSeconds = TWENTY_FIVE_YEARS_AS_MILLISECONDS +
(long)(Math.random() * ((FIFTY_YEARS_AS_MILLISECONDS - TWENTY_FIVE_YEARS_AS_MILLISECONDS) + 1));
Calendar dob = Calendar.getInstance();
dob.setTimeInMillis(dob.getTimeInMillis() - someTimeBetween25And50YearsInMilliSeconds);
StringBuffer sb = new StringBuffer();
sb.append(dob.get(Calendar.YEAR)).append("/").append(dob.get(Calendar.MONTH)+1).append("/").append(dob.get(Calendar.DAY_OF_MONTH));
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
它执行正常,但在2008年或2009年,100个日期的输出结果全部为:
2008/10/8
2008/9/22
2008/7/26
2008/8/20 …Run Code Online (Sandbox Code Playgroud) 我有这个方法解析一天和一个时间,问题是我需要得到下周的一天.
例:
我有这个日期和星期一,晚上10点,当前时间是星期一晚上11点,
当我解析parseTime("M","10:00 PM")它时,由于当前时间它返回过去的日期.
我想实现的是下周的晚上10点
public static Calendar parseTime(String day, String time) {
String[] sepa_time_ampm = time.split(" ");
String[] sepa_time_hr_mn = sepa_time_ampm[0].split(":");
Calendar calendar = Calendar.getInstance();
if (!isNumeric(day)) {
calendar.set(Calendar.DAY_OF_WEEK, parseDay(day));
}
if(Integer.parseInt(sepa_time_hr_mn[0]) == 12) sepa_time_hr_mn[0] = "00";
calendar.set(Calendar.HOUR, Integer.parseInt(sepa_time_hr_mn[0]));
calendar.set(Calendar.MINUTE, Integer.parseInt(sepa_time_hr_mn[1]));
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
if (sepa_time_ampm[1].equals("AM")) {
calendar.set(Calendar.AM_PM, Calendar.AM);
} else {
calendar.set(Calendar.AM_PM, Calendar.PM);
}
if((calendar.getTimeInMillis() - System.currentTimeMillis()) < 0) {
//It is now in the past
}
return calendar; …Run Code Online (Sandbox Code Playgroud)