`
renjie120
  • 浏览: 234744 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D11bba82-ec4a-3d31-a3c0-c51130c62f1c
Java应用集锦
浏览量:22417
社区版块
存档分类
最新评论

java应用集锦7:日期函数 double精度问题 list和数组等

    博客分类:
  • java
阅读更多

转载请注明出处: http://renjie120.iteye.com/

 

1.java中的数组和list的排序,反序,以及互换问题

public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("6");
		list.add("5");
		list.add("3");
		list.add("1");
		list.add("2");
		list.add("4");
		Collections.sort(list);
		Collections.reverse(list);
		String[] str = list.toArray(new String[list.size()]);  // 不转型也可以通过
                      //下面的是多余的类型转换!!
		String[] str2 = (String[])list.toArray(new String[list.size()]);		
		List list3 = Arrays.asList(str); //数组转换成list;
		//Arrays.sort(str);  list 有 正排序和 反排序  Arrays 只有正排序
		for (int i=0;i<str.length;i++){
			System.out.println("list->"+i+":"+str[i]);			
		}
		for (int i=0;i<list3.size();i++){
			System.out.println("list->"+i+":"+list3.get(i));			
		}
	}

2.日期相关函数:

 

package test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateTool {
	/**
	 * 返回日期格式.默认是'yyyy-MM-dd'.
	 * 
	 * @param date
	 * @return
	 */
	public static String toString(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		return sdf.format(date);
	}
        //在指定日期间隔的天数
        public static String afterToday(Date dd,int days) {
		Date d = afterAnyDay(dd, days);
		GregorianCalendar ca = new GregorianCalendar();
		ca.setTime(d);
		int y = ca.get(Calendar.YEAR);
		int m = ca.get(Calendar.MONTH);
		int ddd = ca.get(Calendar.DAY_OF_MONTH);
		return new StringBuilder().append(y).append("-").append(m + 1)
				.append("-").append(ddd).toString();
	}

        //指定日期之后的任意一天
	public static Date afterAnyDay(Date date, int days) {
		if (date == null)
			return null;
		Date newDate = new Date();
		long tp = date.getTime();
		tp = tp + days * ONEDAYMILLISECONDS;
		newDate.setTime(tp);
		return newDate;
	}
	public static Date getDate(String dateStr, String formateStr) {
		SimpleDateFormat formatter2 = new SimpleDateFormat(formateStr);
		Date date = new Date();
		try {
			date = formatter2.parse(dateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}

	/**
	 * 返回指定日期格式的字符串
	 * 
	 * @param formate
	 * @return
	 */
	public static String toString(Date date, String formate) {
		SimpleDateFormat sdf = new SimpleDateFormat(formate);
		return sdf.format(date);
	}

	/**
	 * 得到指定年份,月份,第几天的date对象.
	 * 
	 * @param year
	 * @param month
	 *            (1到12之间整数)
	 * @param day
	 * @return
	 */
	public static Date getDate(int year, int month, int day) {
		GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
		return calendar.getTime();
	}

	/**
	 * 得到日期所对应的年.
	 * 
	 * @return
	 */
	public static int getYear(Date date) {
		GregorianCalendar ca = new GregorianCalendar();
		ca.setTime(date);
		return ca.get(Calendar.YEAR);
	}

	/**
	 * 得到月份.
	 * 
	 * @return
	 */
	public static int getMonth(Date date) {
		GregorianCalendar ca = new GregorianCalendar();
		ca.setTime(date);
		return ca.get(Calendar.MONTH);
	}

	/**
	 * 得到一年的第几天.
	 * 
	 * @return
	 */
	public static int getDayOfYear(Date date) {
		GregorianCalendar ca = new GregorianCalendar();
		ca.setTime(date);
		return ca.get(Calendar.DAY_OF_YEAR);
	}

	/**
	 * 得到一月里面的第几天.
	 * 
	 * @return
	 */
	public static int getDayOfMonth(Date date) {
		GregorianCalendar ca = new GregorianCalendar();
		ca.setTime(date);
		return ca.get(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 得到周几.
	 * 
	 * @return
	 */
	public static int getDayOfWeek(Date date) {
		GregorianCalendar ca = new GregorianCalendar();
		ca.setTime(date);
		return ca.get(Calendar.DAY_OF_WEEK);
	}

	/**
	 * 得到某年中某星期的指定星期几.
	 * 
	 * @param year
	 * @param week
	 * @param day
	 *            为1到7之间整数:1-sun-->7-sta
	 * @return
	 */
	public static Date getDayInThisWeek(int year, int week, int day) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.WEEK_OF_YEAR, week);
		cal.set(Calendar.DAY_OF_WEEK, day);
		return cal.getTime();
	}

	/**
	 * 得到日期是在一年的第几个星期.
	 * 
	 * @param date
	 * @return
	 */
	public static int getWeekOfYear(Date date) {
		GregorianCalendar ca = new GregorianCalendar();
		ca.setTime(date);
		return ca.get(Calendar.WEEK_OF_YEAR);
	}

	/**
	 * 得到两个日期的时间间隔
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static long getTimeInterval(Date date1, Date date2) {
		return date1.getTime() - date2.getTime();
	}

	/**
	 * 得到两个日期的间隔天数.
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static int getDayInterval(Date date1, Date date2) {
		return (int) ((date1.getTime() - date2.getTime()) / ONEDAYMILLISECONDS);
	}

	/**
	 * 得到几天以后的某一天.
	 * 
	 * @param days
	 *            可以为负数
	 * @return
	 */
	public static Date afterAnyDay(Date date, int days) {
		if(date==null)
			return null;
		Date newDate = new Date();
		long tp = date.getTime();
		tp = tp + days * ONEDAYMILLISECONDS;
		newDate.setTime(tp);
		return newDate;
	}

	/**
	 * 得到起始日期之后的某年(某月)(某日)的新日期
	 * 
	 * @param date
	 *            起始日期
	 * @param years
	 *            年份间隔
	 * @param months
	 *            月份间隔
	 * @param days
	 *            天数间隔
	 * @return
	 */
	public static Date afterAnyDay(Date date, int years, int months, int days) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.YEAR, years);
		cal.add(Calendar.MONTH, months);
		cal.add(Calendar.DATE, months);
		return cal.getTime();
	}

	/**
	 * 返回某一年的某月的天数.
	 * 
	 * @param year
	 * @param month
	 * @return
	 */
	public static int maxDayInMonth(int year, int month) {
		Calendar time = Calendar.getInstance();
		// 必须先clear一下,因为默认会得到当前系统时间
		time.clear();
		time.set(Calendar.YEAR, year);
		time.set(Calendar.MONTH, month - 1);
		return time.getActualMaximum(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 返回一年里面某一周的开始日期.
	 * @param year
	 * @param week
	 * @return
	 * @throws ParseException
	 */
	public static Date getWeekStart(int year,int week) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy w");
		Date start = null;
		try {
			start = sdf.parse(year+" "+week);
		} catch (ParseException e) { 
			e.printStackTrace();
		}
		return start;
	}
	
	/**
	 * 返回一年里面某一周的结束的日期.
	 * @param year
	 * @param week
	 * @return
	 * @throws ParseException
	 */
	public static Date getWeekEnd(int year,int week){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy w");
		Date end = null;
		try {
			end = sdf.parse(year+" "+week);
		} catch (ParseException e) { 
			e.printStackTrace();
		}
		return afterAnyDay(end,6);
	}
	
	/**
	 * 返回现在.
	 * 
	 * @return
	 */
	public static Date now() {
		return new Date();
	}

	/**
	 * 将日期格式转换为日历.
	 * 
	 * @param date
	 * @return
	 */
	public static Calendar dateToCalendar(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal;
	}

	/**
	 * 将日历转换为日期.
	 * 
	 * @param cal
	 * @return
	 */
	public static Date calendarToDate(Calendar cal) {
		return cal.getTime();
	}

	public static final long ONEDAYSECONDS = 86400;
	public static final long ONEDAYMILLISECONDS = 86400000;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Date now = DateTool.now();
		System.out.println("今天日期是:" + DateTool.toString(now)); 
		
		System.out.println("现在是:"
				+ DateTool.toString(now, "yyyy-MM-dd HH:mm:ss"));
		System.out.println("今天星期是:" + DateTool.toString(now, "E") + ",是本周的第"
				+ DateTool.getDayOfWeek(now) + "天!");
		System.out.println("40天之后是:"
				+ DateTool.toString(DateTool.afterAnyDay(now, 40)));
		Date endDate = DateTool.getDate(2011, 7, 15);
		System.out.println("距离还有:" + DateTool.getDayInterval(now, endDate)
				+ "天到20100715");
		
		String yearNum = DateTool.toString(now, "yyyy");
		String weekNum = DateTool.toString(now, "w");
		System.out.println("今天是:一年的第几个星期::" + weekNum);
	 	System.out.println("本周的第一天是"+DateTool.toString(getWeekStart(Integer.parseInt(yearNum),Integer.parseInt(weekNum))));
		System.out.println("本周的最后一天是"+DateTool.toString(getWeekEnd(Integer.parseInt(yearNum),Integer.parseInt(weekNum)))); 
	}
}

 

3.关于double类型的运算,特别是精度的问题:

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

public class Tool {
	private static DecimalFormat df = new DecimalFormat("#######.#####");
	/**
	 * 减法
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double subtract(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return Double.parseDouble(df.format(b1.subtract(b2).doubleValue()));
	}

	/**
	 * 自定义运算法则的除法运算.
	 * @param d1
	 * @param d2
	 * @param scale 精度
	 * @param mode
	 * @return
	 */
	public static double divide(double d1, double d2, int scale,
			RoundingMode mode) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return Double.parseDouble(df.format(b1.divide(b2, scale, mode)
				.doubleValue()));
	}
	
	/**
	 * 四舍五入的除法运算.
	 * @param d1
	 * @param d2
	 * @param scale 精度
	 * @return
	 */
	public static double divide(double d1, double d2, int scale ) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return Double.parseDouble(df.format(b1.divide(b2, scale, RoundingMode.HALF_UP)
				.doubleValue()));
	}

	public static double multiply(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return Double.parseDouble(df.format(b1.multiply(b2).doubleValue()));
	}

	public static double add(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return Double.parseDouble(df.format(b1.add(b2).doubleValue()));
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics