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

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()));
	}
}
分享到:
评论

相关推荐

    SQL日期函数应用集锦

    通过上述函数的应用,可以实现对日期的各种复杂操作,如计算两个日期之间的差异、获取特定日期等。这些功能对于数据分析、报表生成等场景非常有用。希望本文介绍的这些函数能够帮助大家更好地理解和掌握SQL Server中...

    Java面试集锦: Core Java Essentials

    在这本《Java面试集锦: Core Java Essentials》中,作者Arulkumaran Kumaraswami Pillai和Sivayini Arulkumaran深入探讨了Java平台、语言、类、对象、面向对象概念与原理、数据结构、算法和模式匹配基础,为读者准备...

    Java编程精选集锦

    12. **Java 8新特性**:Java 8引入了Lambda表达式、函数式编程、Stream API、日期时间API等新特性,提升了代码的简洁性和效率。 13. **内存管理和垃圾回收**:Java的自动内存管理机制,包括堆内存、栈内存和方法区...

    java经典小程序-函数小程序

    "java经典小程序-函数小程序"这个资源集锦可能是为了帮助学习者深入理解和掌握Java中的函数编程概念。函数在Java中是代码组织的基本单元,用于执行特定任务。下面,我们将详细探讨与Java函数程序相关的知识点。 1. ...

    java常用字符串函数集锦

    Java 中常用的字符串函数集锦 Java 中字符串是连串的字符,但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java 将字符串作为 String 类型对象来处理。将字符串作为内置的对象处理允许 Java 提供十分...

    JAVA案例开发集锦pdf

    《JAVA案例开发集锦》是一本专注于Java编程实践的资源集合,它包含了多个精心设计的实例,旨在帮助读者深入理解Java语言的特性和应用。这本书的内容涵盖了从基础语法到高级特性,从简单程序到复杂系统的设计,是学习...

    java面试笔试题集锦

    10. **Java 8及更高版本的新特性**:Lambda表达式、函数式接口、Stream API、Optional类、日期时间API等,这些都是现代Java开发的重要组成部分。 11. **Spring框架**:作为Java企业应用最广泛的技术,Spring的IoC...

    Java经典项目集锦

    【Java经典项目集锦】是Java编程学习的重要资源集合,涵盖了多个Java开发的经典案例和实践项目,旨在帮助Java初学者和进阶者深入理解和应用Java技术。这些项目不仅能够提升编程技能,还能够锻炼实际问题解决能力,...

    Java笔试题集锦:web\jsp\sevlet

    Java笔试题集锦主要涵盖了Java基础、Web技术以及Servlet等相关知识点。以下是对这些知识点的详细说明: 1. **MVC模式**:Model-View-Controller(MVC)是一种设计模式,用于分离应用程序的业务逻辑、用户界面和控制...

    Java常见问题集锦

    ### Java常见问题集锦 #### 1. Java2 (JDK 1.2) 的环境配置 - **问题描述**:如何在不同操作系统上正确配置Java2(即JDK 1.2)的环境变量? - **解决方案**: - **Solaris平台**: - 设置`JAVA_HOME`为Java2的...

    java技术文章集锦

    Java技术文章集锦是一个丰富的资源库,包含了大量关于Java编程的知识点,对于正在学习或已经从事Java开发的人员来说,这是一个宝贵的参考资料。这个压缩包文件中的每一篇文章都可能涵盖了一个或多个Java技术主题,让...

    Java面试题集锦6:华为面试题 管理资料.pdf

    在Java面试中,面试官通常会关注候选人的基础知识、编程能力、设计模式、并发处理以及框架应用等方面。以下是根据题目提供的部分资料整理的一些关键知识点: 1. **面向对象的特征**:封装、继承、多态。面向对象...

    基于NetBeans开发的java应用程序集锦6

    【标题】"基于NetBeans开发的Java应用程序集锦6"主要涵盖了使用NetBeans IDE进行Java应用程序开发的一些实例和实践。NetBeans是一个强大的开源集成开发环境,尤其适合Java开发者,提供了丰富的功能,包括代码编辑、...

    基于NetBeans开发的java应用程序集锦7

    【标题】"基于NetBeans开发的Java应用程序集锦7"揭示了如何利用NetBeans IDE进行Java应用程序的开发,特别是针对J2ME平台的项目。这个集合包含了一系列初级阶段的实例,旨在帮助初学者掌握Java编程基础,特别是对于...

    Java入门面试题集锦:全面覆盖30道经典问题,助你准备顺利通过面试!

    Java是一种广泛应用的高级编程语言,由Sun Microsystems在1995年发布,其设计目标是实现跨平台的可移植性和高效性。Java以其面向对象的特性、简单的语法、丰富的类库以及内置的安全机制赢得了广大开发者青睐。以下是...

    基于NetBeans开发的java应用程序集锦1

    **Java与NetBeans开发平台简介** Java是一种广泛使用的面向对象的编程语言,以其跨平台、安全性高和可移植性等特点闻名。...总之,"基于NetBeans开发的Java应用程序集锦1"为Java初学者提供了一个全面的学习起点。

    Oracle日期函数集锦

    在这个"Oracle日期函数集锦"中,我们将深入探讨一系列常用的Oracle日期函数及其用法。 首先,我们来看日期数据的常见格式: 1. `Y`、`YY`、`YYY`:分别表示年份的最后一位、两位和三位。例如,`to_char(sysdate,'Y...

    java面试问题集锦

    ### Java面试问题集锦 #### 一、运行程序之前: ##### Path与classpath图解 - **Path**:指的是操作系统环境变量中的PATH,它定义了系统查找可执行文件的路径列表。当用户在命令行中输入一个命令时,系统会在PATH...

Global site tag (gtag.js) - Google Analytics