package com.neverwinterdp.scribengin.partitioner; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DatePartitioner extends AbstractPartitioner { SimpleDateFormat f; String frmtString; /** * Format is taken from SimpleDateFormat class: * G Era designator Text AD * y Year Year 1996; 96 * M Month in year Month July; Jul; 07 * w Week in year Number 27 * W Week in month Number 2 * D Day in year Number 189 * d Day in month Number 10 * F Day of week in month Number 2 * E Day in week Text Tuesday; Tue * a Am/pm marker Text PM * H Hour in day (0-23) Number 0 * k Hour in day (1-24) Number 24 * K Hour in am/pm (0-11) Number 0 * h Hour in am/pm (1-12) Number 12 * m Minute in hour Number 30 * s Second in minute Number 55 * S Millisecond Number 978 * z Time zone General time zone Pacific Standard Time; PST; GMT-08:00 * Z Time zone RFC 822 time zone -0800 * * examples: * DatePartitioner d = DatePartitioner("yy/MM_dd"); * //returns "14/10_04" * d.getPartition(); * * DatePartitioner d = DatePartitioner("yyyy/MM/dd"); * //returns "2014/10/04" * d.getPartition(); * * @author Richard Duarte * */ public DatePartitioner(String format){ frmtString = format; f = new SimpleDateFormat(format); } /** * Returns string of current time and date using the * format passed in from the constructor */ @Override public String getPartition() { return f.format(new Date()); } /** * Returns the next time to refresh the partition */ @Override public Date getRefresh() { Calendar cal = Calendar.getInstance(); //I really hope nobody wants to change //partitions every millisecond... if(frmtString.contains("S")){ cal.add(Calendar.MILLISECOND, 1); } //TODO: Need to zero out everything after the second, etc else if(frmtString.contains("s")){ cal.add(Calendar.SECOND, 1); cal.set(Calendar.MILLISECOND, 0); } else if(frmtString.contains("m")){ cal.set(Calendar.MILLISECOND, 0); cal.set(Calendar.SECOND, 0); cal.add(Calendar.MINUTE, 1); } else if(frmtString.contains("h") || frmtString.contains("H") || frmtString.contains("k") || frmtString.contains("K")){ cal.set(Calendar.MILLISECOND, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.add(Calendar.HOUR_OF_DAY, 1); } else if(frmtString.contains("D") || frmtString.contains("d") || frmtString.contains("F") || frmtString.contains("E") ){ cal.set(Calendar.MILLISECOND, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.HOUR_OF_DAY, 0); cal.add(Calendar.DAY_OF_MONTH, 1); } else if(frmtString.contains("w") || frmtString.contains("W") ){ cal.set(Calendar.MILLISECOND, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.DAY_OF_MONTH, 1); cal.add(Calendar.WEEK_OF_MONTH, 1); } else if(frmtString.contains("M")){ cal.set(Calendar.MILLISECOND, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.DAY_OF_MONTH, 1); cal.add(Calendar.MONTH, 1); } else if(frmtString.contains("y")){ cal.set(Calendar.MILLISECOND, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.MONTH, 0); cal.add(Calendar.YEAR, 1); } return cal.getTime(); } }