(一)Java获取并输出两日期间的所有日期
做数据分析和统计时,经常会要统计一段日期间的所有数据,简单的将日期当做数字来遍历肯定是不妥的,因为月份的更替会导致数字的不连续,那么如何获取指定起止日期间的所有日期呢,我们可以借由java.util.Calendar和java.util.Date库来实现这一目的。示例代码如下:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) throws ParseException { //起止日期 String startDate = "20130927"; String endDate = "20131004"; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Long startM = sdf.parse(startDate).getTime(); Long endM = sdf.parse(endDate).getTime(); long result = (endM - startM) / (24 * 60 * 60 * 1000); System.out.println("起止日期相差:" + result + "天"); Date startDay = sdf.parse(startDate); Calendar startTime = Calendar.getInstance(); startTime.clear(); startTime.setTime(startDay); for (int i = 0; i < (int)result; i++) { String date = String.format("%1$04d%2$02d%3$02d", startTime.get(Calendar.YEAR), (startTime.get(Calendar.MONTH)+1), startTime.get(Calendar.DAY_OF_MONTH)); System.out.println(date); startTime.add(Calendar.DAY_OF_YEAR, 1); } } }
输出结果如下:
起止日期相差:7天 20130927 20130928 20130929 20130930 20131001 20131002 20131003
(二)多种日期格式相互转换
在数据清洗或格式标准化时,常常遇到转换日期格式的问题,如果完全人工分析字符串,肯定比较费时费力,我们可以使用java.text.SimpleDateFormat库来轻松解决这一问题。
【示例】原始日期格式为“14:09:59:31/Dec/2013”,我们要转换为“ 2013:12:31-14:09:59”
在程序开头导入:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Locale;
public static String dateFormatConvert(String date_old){ SimpleDateFormat sdf_old = new SimpleDateFormat( "HH:mm:ss:dd/MMM/yyyy", Locale.ENGLISH); //指明转换前日期格式 SimpleDateFormat sdf_new = new SimpleDateFormat( "yyyy:MM:dd-HH:mm:ss"); //指明转换后日期格式 String date_new = ""; try { date_new = sdf_new.format(sdf_old.parse(date_old)); } catch (ParseException e1) { e1.printStackTrace(); } return date_new; }
public static void main(String[] args) { String date_old = "14:09:59:31/Dec/2013"; String date_new = dateFormatConvert(date_old); System.out.println("转换前日期格式: "+date_old); System.out.println("转换后日期格式: "+date_new); } 输出: 转换前日期格式: 14:09:59:31/Dec/2013 转换后日期格式: 2013:12:31-14:09:59