转载请注明出处: 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()));
}
}