private int calcWorkingDayNum() { DateTime start = sprint.getStartDate(); DateTime end = sprint.getEndDate(); start = start.minusMillis(start.millisOfDay().get()); end = end.minusMillis(end.millisOfDay().get()); int i = 0; for (; start.isBefore(end); start = start.plusDays(1)) { if (start.getDayOfWeek() < DateTimeConstants.SATURDAY) { i++; } } return i; }
public static void main(String[] args) { Calendar date = Calendar.getInstance(); date.set(2005, 11, 1); System.out.println(new DateTime(date.getTime()).withMillisOfDay(0)); DateTime dates = new DateTime(); DateTime date2 = dates.minusMillis(10); System.out.println(dates.isAfter(date2)); }
/** * 计算指定时间之前的日期 * * @param date 待计算时间 * @param random 待计算数 * @param timeType 时间类型枚举 * @see org.codingsills.modules.utils.DateKit.TimeType * @return Date */ public static Date preDate(Date date, int random, TimeType timeType) { Date preDate = null; if (date == null) { return preDate; } DateTime dateTime = fromDate(date); random = Math.abs(random); switch (timeType.getCode()) { case "Y": preDate = dateTime.minusYears(random).toDate(); break; case "M": preDate = dateTime.minusMonths(random).toDate(); break; case "W": preDate = dateTime.minusWeeks(random).toDate(); break; case "D": preDate = dateTime.minusDays(random).toDate(); break; case "H": preDate = dateTime.minusHours(random).toDate(); break; case "MIN": preDate = dateTime.minusMinutes(random).toDate(); break; case "S": preDate = dateTime.minusSeconds(random).toDate(); break; case "MS": preDate = dateTime.minusMillis(random).toDate(); break; default: break; } return preDate; }
private static RubyTime createTime(IRubyObject recv, IRubyObject[] args, boolean gmt) { Ruby runtime = recv.getRuntime(); int len = ARG_SIZE; Boolean isDst = null; DateTimeZone dtz; if (gmt) { dtz = DateTimeZone.UTC; } else if (args.length == 10 && args[9] instanceof RubyString) { dtz = getTimeZone(runtime, ((RubyString) args[9]).toString()); } else { dtz = getLocalTimeZone(runtime); } if (args.length == 10) { if (args[8] instanceof RubyBoolean) { isDst = ((RubyBoolean) args[8]).isTrue(); } args = new IRubyObject[] { args[5], args[4], args[3], args[2], args[1], args[0], runtime.getNil() }; } else { // MRI accepts additional wday argument which appears to be ignored. len = args.length; if (len < ARG_SIZE) { IRubyObject[] newArgs = new IRubyObject[ARG_SIZE]; System.arraycopy(args, 0, newArgs, 0, args.length); for (int i = len; i < ARG_SIZE; i++) { newArgs[i] = runtime.getNil(); } args = newArgs; len = ARG_SIZE; } } if (args[0] instanceof RubyString) { args[0] = RubyNumeric.str2inum(runtime, (RubyString) args[0], 10, false); } int year = (int) RubyNumeric.num2long(args[0]); int month = 1; if (len > 1) { if (!args[1].isNil()) { IRubyObject tmp = args[1].checkStringType(); if (!tmp.isNil()) { String monthString = tmp.toString().toLowerCase(); Integer monthInt = MONTHS_MAP.get(monthString); if (monthInt != null) { month = monthInt; } else { try { month = Integer.parseInt(monthString); } catch (NumberFormatException nfExcptn) { throw runtime.newArgumentError("Argument out of range."); } } } else { month = (int) RubyNumeric.num2long(args[1]); } } if (1 > month || month > 12) { throw runtime.newArgumentError("Argument out of range: for month: " + month); } } int[] int_args = {1, 0, 0, 0, 0, 0}; for (int i = 0; int_args.length >= i + 2; i++) { if (!args[i + 2].isNil()) { if (!(args[i + 2] instanceof RubyNumeric)) { args[i + 2] = args[i + 2].callMethod(runtime.getCurrentContext(), "to_i"); } long value = RubyNumeric.num2long(args[i + 2]); if (time_min[i] > value || value > time_max[i]) { throw runtime.newArgumentError("argument out of range."); } int_args[i] = (int) value; } } if (!runtime.is1_9()) { if (0 <= year && year < 39) { year += 2000; } else if (69 <= year && year < 139) { year += 1900; } } DateTime dt; // set up with min values and then add to allow rolling over try { dt = new DateTime(year, 1, 1, 0, 0, 0, 0, DateTimeZone.UTC); dt = dt.plusMonths(month - 1) .plusDays(int_args[0] - 1) .plusHours(int_args[1]) .plusMinutes(int_args[2]) .plusSeconds(int_args[3]); if (runtime.is1_9() && !args[5].isNil()) { double millis = RubyFloat.num2dbl(args[5]); int int_millis = (int) (millis * 1000) % 1000; dt = dt.plusMillis(int_millis); } dt = dt.withZoneRetainFields(dtz); // we might need to perform a DST correction if (isDst != null) { // the instant at which we will ask dtz what the difference between DST and // standard time is long offsetCalculationInstant = dt.getMillis(); // if we might be moving this time from !DST -> DST, the offset is assumed // to be the same as it was just before we last moved from DST -> !DST if (dtz.isStandardOffset(dt.getMillis())) { offsetCalculationInstant = dtz.previousTransition(offsetCalculationInstant); } int offset = dtz.getStandardOffset(offsetCalculationInstant) - dtz.getOffset(offsetCalculationInstant); if (!isDst && !dtz.isStandardOffset(dt.getMillis())) { dt = dt.minusMillis(offset); } if (isDst && dtz.isStandardOffset(dt.getMillis())) { dt = dt.plusMillis(offset); } } } catch (org.joda.time.IllegalFieldValueException e) { throw runtime.newArgumentError("time out of range"); } RubyTime time = new RubyTime(runtime, (RubyClass) recv, dt); // Ignores usec if 8 args (for compatibility with parsedate) or if not supplied. if (args.length != 8 && !args[6].isNil()) { int usec = int_args[4] % 1000; int msec = int_args[4] / 1000; if (int_args[4] < 0) { msec -= 1; usec += 1000; } time.dt = dt.withMillis(dt.getMillis() + msec); time.setUSec(usec); } time.callInit(IRubyObject.NULL_ARRAY, Block.NULL_BLOCK); return time; }
private int[] queryUsingDummyStreamAsOtherUser(String streamOwner, String streamName) throws ClassNotFoundException, SQLException, IOException, NamingException { StreamDatabaseDriver db = null; String startTime = fmt.print(startDate); String endTime = fmt.print(endDate.minusMillis(1)); Log.info("startTime: " + startTime + ", endTime: " + endTime); long durationInSecs = (endDate.getMillis() / 1000) - (startDate.getMillis() / 1000); int size = (int) (durationInSecs / DUMMY_STREAM_INTERVAL); if (size <= 0) { size = 1; } int[] shareflags = new int[size]; Log.info("size: " + (int) (durationInSecs / DUMMY_STREAM_INTERVAL)); try { db = DatabaseConnector.getStreamDatabase(); boolean isData = db.prepareQuery( OTHER_USER_NAME, streamOwner, DUMMY_STREAM_NAME, startTime, endTime, null, null, 0, 0, 0, false, streamName); if (!isData) { Log.info("No data shared with " + OTHER_USER_NAME + " for " + streamName); return shareflags; } Object[] tuple = new Object[db.getStoredStreamInfo().channels.size() + 1]; long todayMillis = startDate.getMillis(); while (db.getNextTuple(tuple)) { long timestamp = (Long) tuple[0]; // Log.info("timestamp: " + timestamp); int idx = (int) ((timestamp - todayMillis) / 1000 / DUMMY_STREAM_INTERVAL); if (idx >= size) { Log.error( "idx >= size, timestamp = " + fmt.print(new DateTime(timestamp)) + ", idx = " + idx + ", size = " + size); } else { shareflags[idx] = 1; } } return shareflags; } finally { if (db != null) { try { db.close(); } catch (SQLException e) { e.printStackTrace(); } } } }