Java之时间、日期与数字
java计算时间差,日期差小结

java计算时间差,⽇期差⼩结转⾃:1、java 7中的⽇历类CalendarCalendar类使⽤其静态的getInstance()⽅法获取⼀个⽇历实例,该实例为当前的时间;如果想改变时间,可以通过其setTime⽅法传⼊⼀个Date对象,即可获得Date对象所表⽰时间的Calendar对象1/**2 *使⽤Calendar对象计算时间差,可以按照需求定制⾃⼰的计算逻辑3 * @param strDate4 * @throws ParseException5*/6public static void calculateTimeDifferenceByCalendar(String strDate) throws ParseException {7 SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");8 Date date = formatter.parse(strDate);910 Calendar c1 = Calendar.getInstance(); //当前⽇期11 Calendar c2 = Calendar.getInstance();12 c2.setTime(date); //设置为另⼀个时间1314int year = c1.get(Calendar.YEAR);15int oldYear = c2.get(Calendar.YEAR);1617//这⾥只是简单的对两个年份数字进⾏相减,⽽没有考虑⽉份的情况18 System.out.println("传⼊的⽇期与今年的年份差为:" + (year - oldYear));19 }输出为:1传⼊的⽇期与今年的年份差为:122、java 8中的周期类Period通过调⽤Period类的静态⽅法between,传⼊两个待⽐较的LocalDate对象today与oldDate,得到的Period的对象p中就包含了today与oldDate两个⽇期相差的年、⽉、⽇信息,可以通过p.getYears()等⽅法取出1/**2 * 使⽤java 8的Period的对象计算两个LocalDate对象的时间差,严格按照年、⽉、⽇计算,如:2018-03-12 与 2014-05-23 相差 3 年 9 个⽉ 17 天3 * @param year4 * @param month5 * @param dayOfMonth6*/7public static void calculateTimeDifferenceByPeriod(int year, Month month, int dayOfMonth) {8 LocalDate today = LocalDate.now();9 System.out.println("Today:" + today);10 LocalDate oldDate = LocalDate.of(year, month, dayOfMonth);11 System.out.println("OldDate:" + oldDate);1213 Period p = Period.between(oldDate, today);14 System.out.printf("⽬标⽇期距离今天的时间差:%d 年 %d 个⽉ %d 天\n", p.getYears(), p.getMonths(), p.getDays());15 }输出为:1 Today:2018-03-132 OldDate:2014-05-233⽬标⽇期距离今天的时间差:3 年 9 个⽉ 18 天3、java 8中的Duration类Duration与Period相对应,Period⽤于处理⽇期,⽽Duration计算时间差还可以处理具体的时间,也是通过调⽤其静态的between⽅法,该⽅法的签名是between(Temporal startInclusive, Temporal endExclusive),因此可以传⼊两个Instant的实例(Instant实现了Temporal接⼝),并可以以毫秒(toMillis)、秒(getSeconds)等多种形式表⽰得到的时间差1public static void calculateTimeDifferenceByDuration() {2 Instant inst1 = Instant.now(); //当前的时间3 System.out.println("Inst1:" + inst1);4 Instant inst2 = inst1.plus(Duration.ofSeconds(10)); //当前时间+10秒后的时间5 System.out.println("Inst2:" + inst2);6 Instant inst3 = inst1.plus(Duration.ofDays(125)); //当前时间+125天后的时间7 System.out.println("inst3:" + inst3);89 System.out.println("以毫秒计的时间差:" + Duration.between(inst1, inst2).toMillis());1011 System.out.println("以秒计的时间差:" + Duration.between(inst1, inst3).getSeconds());12 }输出为:1 Inst1:2018-03-13T09:06:00.691Z2 Inst2:2018-03-13T09:06:10.691Z3 inst3:2018-07-16T09:06:00.691Z4以毫秒计的时间差:100005以秒计的时间差:108000004、java 8中的ChronoUnit类ChronoUnit的between⽅法签名为,between(Temporal temporal1Inclusive, Temporal temporal2Exclusive),需要注意的是,如果要以不同的单位展⽰时间差,between⼊参中的时间对象必须包含有对应的时间信息,否则会抛出java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit XXX的异常1/**2 * 使⽤java 8的ChronoUnit,ChronoUnit可以以多种单位(基本涵盖了所有的,看源码发现竟然还有“FOREVER”这种单位。
java 日期和时间字符串格式化

java 日期和时间字符串格式化
SimpleDateFormat类可以选择任何用户定义的日期-时间格式的模式。
但是,仍然建议通过DateFormat中的getTimeInstance、getDateInstance 或getDateTimeInstance 来创建日期-时间格式器。
每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式器。
可以根据需要使用applyPattern方法来修改格式模式。
该构造方法可以使用参数pattern指定的格式创建一个对象,该对象调用format(Date date)方法格式化时间对象date。
需要注意的是,pattern中应当含有一些有效的字符序列。
例如:
●y或yy 表示使用两位数字来输出年份;yyyy表示使用4位数字输出年份。
●M或MM 表示使用两位数字或文本输出月份,如果使用汉字输出月份,pattern中应
连续包含至少3个M,例如MMM。
●d或dd 表示用两位数字输出日。
●H或HH 表示用两位数字输出小时。
●m或mm 表示用两位数字输出分。
●s或ss 表示用两位数字输出秒。
● E 表示用两位数字输出星期。
转换中文格式的时间的实例源代码如下所示:
执行上述代码,结果如图5-19所示。
图5-19 输出日期时间格式。
Java万年历源代码,可显示公历、农历、系统时间、国际时间

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;import java.util.TimeZone;public class wannianli extends JFrame implements ActionListener, MouseListener {private Calendar cld = Calendar.getInstance();//获取一个Calendar类的实例对象private String[] astr = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };private DefaultTableModel dtm = new DefaultTableModel(null, astr);private JTable table = new JTable(dtm);private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton("上一年");private JButton bNextYear = new JButton("下一年");private JButton bLastMonth = new JButton("上月");private JButton bNextMonth = new JButton("下月");private JPanel p1 = new JPanel(); // 设立八个中间容器,装入布局控制日期的按钮模块private JPanel p2 = new JPanel(new GridLayout(3,2));//网格布局private JPanel p3 = new JPanel(new BorderLayout());//边界布局private JPanel p4 = new JPanel(new GridLayout(2,1));private JPanel p5 = new JPanel(new BorderLayout());private JPanel p6 = new JPanel(new GridLayout(2,2));private JPanel p7 = new JPanel(new GridLayout(2,1));private JPanel p8 = new JPanel(new BorderLayout());private JComboBox timeBox = newJComboBox(TimeZone.getAvailableIDs());//对所有支持时区进行迭代,获取所有的id;private JTextField jtfYear = new JTextField(5);// jtfYeaar年份显示输入框private JTextField jtfMonth = new JTextField(2);// jtfMouth月份显示输入框private JTextField timeField=new JTextField();//各城市时间显示框private static JTextArea jta = new JTextArea(10,5);//农历显示区private JScrollPane jsp = new JScrollPane(jta);private JLabel l = new JLabel("花江小精灵:亲!你可以直接输入年月查询.");private JLabel lt = new JLabel();private JLabel ld = new JLabel();private JLabel lu = new JLabel("农历和节气");private JLabel null1=new JLabel();private int lastTime;//private String localTime = null;private String s = null;private SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy年MM月dd 日 hh时mm分ss秒");public wannianli() {super("花江日历过去仅留追忆,未来刚生憧憬,唯有坚守本心,把握今天 ZYT 詹永堂 ");// 框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 窗口关闭函数this.getContentPane().setLayout(new BorderLayout(9, 10));jta.setLineWrap(true);// 长度大于分配长度时候则换行jta.setFont(new Font("黑体", Font.BOLD, 16));table.setBackground(Color.white);table.setGridColor(Color.pink);// 星期之间的网格线是灰色的table.setBackground(Color.white);table.setColumnSelectionAllowed(true);// 将table中的列设置为可选择的table.setSelectionBackground(Color.pink);// 当选定某一天时背景颜色为黑色table.setSelectionForeground(Color.GREEN);table.setBackground(new Color(184,207, 229));// 日期显示表格为浅蓝色table.setFont(new Font("黑体", Font.BOLD, 24));// 日期数字字体格式table.setRowHeight(26);// 表格的高度table.addMouseListener(this); // 鼠标监听器、lu.setFont(new Font("黑体", Font.BOLD, 22));//农历标签格氏jtfYear.addActionListener(this);// 可输入年份的文本框// 为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNextMonth.addActionListener(this);timeBox.addItemListener(new TimeSelectedChangedListener());// 将按钮添加到Jpane上p1.add(bLastYear);p1.add(jtfYear);// 年份输入文本框p1.add(bNextYear);p1.add(bLastMonth);p1.add(jtfMonth);p1.add(bNextMonth);p3.add(jsp, BorderLayout.SOUTH);p3.add(lu,BorderLayout.CENTER);p3.add(ld, BorderLayout.NORTH);p4.add(lt);p4.add(l);p5.add(p4, BorderLayout.SOUTH);p5.add(sp, BorderLayout.CENTER);p5.add(p1, BorderLayout.NORTH);p6.add(timeBox);p6.add(null1);p6.add(timeField);p8.add(p2,BorderLayout.CENTER);p8.add(p7,BorderLayout.SOUTH);this.getContentPane().add(p3, BorderLayout.EAST);this.getContentPane().add(p5, BorderLayout.CENTER);this.getContentPane().add(p6,BorderLayout.SOUTH);this.getContentPane().add(p8,BorderLayout.WEST);String[] strDate = DateFormat.getDateInstance().format(new Date()) .split("-");// 获取日期cld.set(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1]) - 1,0);showCalendar(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1]), cld);jtfMonth.setEditable(false);// 设置月份文本框为不可编辑jtfYear.setText(strDate[0]);jtfMonth.setText(strDate[1]);this.showTextArea(strDate[2]);ld.setFont(new Font("新宋体", Font.BOLD, 24));new Timer(lt).start();new TimeThread().start();this.setBounds(200, 200, 700, 350);this.setResizable(false);this.setVisible(true);}public void showCalendar(int localYear, int localMonth, Calendar cld) {int Days = getDaysOfMonth(localYear, localMonth) +cld.get(Calendar.DAY_OF_WEEK) -2;Object [] ai = new Object[7];lastTime = 0;for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i <= Days; i++) {ai[i%7] =String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));if (i%7 == 6){dtm.addRow(ai);ai = new Object[7];lastTime++;}}dtm.addRow(ai);}public int getDaysOfMonth(int Year, int Month) {//计算各月的天数if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10||Mont h==12){return 31;}if(Month==4||Month==6||Month==9||Month==11){return 30;}if(Year%4==0&&Year%100!=0||Year%400==0)//闰年{return 29;}else {return 28;}}public void actionPerformed(ActionEvent e)//从界面上获取年月数据{if(e.getSource() == jtfYear || e.getSource() == bLastYear || e.getSource() == bNextYear ||e.getSource() == bLastMonth || e.getSource() == bNextMonth){int m, y;try//控制输入的年份正确,异常控制{if (jtfYear.getText().length() != 4){throw new NumberFormatException();}y = Integer.parseInt(jtfYear.getText());m = Integer.parseInt(jtfMonth.getText());}catch (NumberFormatException ex){JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);return;}ld.setText("没有选择日期");for (int i = 0; i < lastTime+1; i++){ dtm.removeRow(0);}if(e.getSource() ==bLastYear){ jtfYear.setText(String.valueOf(--y)); }if(e.getSource() ==bNextYear){jtfYear.setText(String.valueOf(++y)); }if(e.getSource() == bLastMonth){if(m == 1){jtfYear.setText(String.valueOf(--y));m = 12;jtfMonth.setText(String.valueOf(m));}else{jtfMonth.setText(String.valueOf(--m));}}if(e.getSource() == bNextMonth){if(m == 12){jtfYear.setText(String.valueOf(++y));m = 1;jtfMonth.setText(String.valueOf(m));}else{jtfMonth.setText(String.valueOf(++m));}}cld.set(y, m-1, 0);showCalendar(y, m, cld);}}public void mouseClicked(MouseEvent e){jta.setText(null);int r = table.getSelectedRow();int c = table.getSelectedColumn();if (table.getValueAt(r,c) == null){ld.setText("没有选择日期");}else{this.showTextArea(table.getValueAt(r,c));}}private void showTextArea(Object selected){ld.setText(jtfYear.getText()+"年"+jtfMonth.getText()+"月"+selected+"日");}public static void main(String[] args){JFrame.setDefaultLookAndFeelDecorated(true);JDialog.setDefaultLookAndFeelDecorated(true);new wannianli();jta.setText(today());}private void updateTimeText(String timeZoneId) {if(timeZoneId != null){TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);dateFormat.setTimeZone(timeZone);Calendar calendar = Calendar.getInstance();calendar.setTimeZone(timeZone);timeField.setText(dateFormat.format(calendar.getTime()));}else{timeField.setText(null);}}private class TimeSelectedChangedListener implements ItemListener { public void itemStateChanged(ItemEvent e) {if (e.getStateChange()==ItemEvent.SELECTED) {if (e.getItem() instanceof String) {s = e.getItem().toString();}}}}private class TimeThread extends Thread{public void run(){while(true){updateTimeText(s);try{Thread.sleep(100);}catch(InterruptedException e){e.printStackTrace();}}}}class Timer extends Thread //显示系统时间{private JLabel lt;private SimpleDateFormat fy = new SimpleDateFormat(" Gyyyy.MM.dd HH:mm:ss ");public Timer(JLabel lt){this.lt=lt;}public void run(){while(true){try{lt.setText(fy.format(new Date()));this.sleep(500);}catch(InterruptedException ex){ex.printStackTrace();}}}}final private static long[] lunarInfo= new long[] { 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554,0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0,0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566,0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550,0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0,0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263,0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0,0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5,0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0,0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9,0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0,0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520,0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 };final private static int[] year20 = new int[] { 1, 4, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };final private static int[] year19 = new int[] { 0, 3, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 };final private static int[] year2000 = new int[] { 0, 3, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };public final static String[] nStr1 = new String[] { "", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一","十二" };private final static String[] Gan = new String[] { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };private final static String[] Zhi = new String[] { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };private final static String[] Animals = new String[] { "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };// 传回农历 y年的总天数final private static int lYearDays(int y) {int i, sum = 348;for (i = 0x8000; i > 0x8; i >>= 1) {if ((lunarInfo[y - 1900] & i) != 0)sum += 1;}return (sum + leapDays(y));}// 传回农历 y年闰月的天数final private static int leapDays(int y) {if (leapMonth(y) != 0) {if ((lunarInfo[y - 1900] & 0x10000) != 0)return 30;elsereturn 29;} elsereturn 0;}// 传回农历 y年闰哪个月 1-12 , 没闰传回 0final private static int leapMonth(int y) {return (int) (lunarInfo[y - 1900] & 0xf);}//传回农历 y年m月的总天数final private static int monthDays(int y, int m) {if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)return 29;elsereturn 30;}// 传回农历 y年的生肖final public static String AnimalsYear(int y) {return Animals[(y - 4) % 12];}//传入月日的offset 传回干支,0=甲子final private static String cyclicalm(int num) {return (Gan[num % 10] + Zhi[num % 12]);}// 传入 offset 传回干支, 0=甲子final public static String cyclical(int y) {int num = y - 1900 + 36;return (cyclicalm(num));}// 传出农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6final private long[] Lunar(int y, int m) {long[] nongDate = new long[7];int i = 0, temp = 0, leap = 0;Date baseDate = new GregorianCalendar(1900 + 1900, 1,31).getTime();Date objDate = new GregorianCalendar(y + 1900, m, 1).getTime();long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;if (y < 2000)offset += year19[m - 1];if (y > 2000)offset += year20[m - 1];if (y == 2000)offset += year2000[m - 1];nongDate[5] = offset + 40;nongDate[4] = 14;for (i = 1900; i < 2050 && offset > 0; i++) {temp = lYearDays(i);offset -= temp;nongDate[4] += 12;}if (offset < 0) {offset += temp;i--;nongDate[4] -= 12;}nongDate[0] = i;nongDate[3] = i - 1864;leap = leapMonth(i); // 闰哪个月nongDate[6] = 0;for (i = 1; i < 13 && offset > 0; i++) {// 闰月if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i;nongDate[6] = 1;temp = leapDays((int) nongDate[0]);} else {temp = monthDays((int) nongDate[0], i);}// 解除闰月if (nongDate[6] == 1 && i == (leap + 1))nongDate[6] = 0;offset -= temp;if (nongDate[6] == 0)nongDate[4]++;}if (offset == 0 && leap > 0 && i == leap + 1) {if (nongDate[6] == 1) {nongDate[6] = 0;} else {nongDate[6] = 1;--i;--nongDate[4];}}if (offset < 0) {offset += temp;--i;--nongDate[4];}nongDate[1] = i;nongDate[2] = offset + 1;return nongDate;}// 传出y年m月d日对应的农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6final public static long[] calElement(int y, int m, int d) {long[] nongDate = new long[7];int i = 0, temp = 0, leap = 0;Date baseDate = new GregorianCalendar(0 + 1900, 0, 31).getTime();Date objDate = new GregorianCalendar(y, m - 1, d).getTime();long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;nongDate[5] = offset + 40;nongDate[4] = 14;for (i = 1900; i < 2050 && offset > 0; i++) {temp = lYearDays(i);offset -= temp;nongDate[4] += 12;}if (offset < 0) {offset += temp;i--;nongDate[4] -= 12;}nongDate[0] = i;nongDate[3] = i - 1864;leap = leapMonth(i); // 闰哪个月nongDate[6] = 0;for (i = 1; i < 13 && offset > 0; i++) {// 闰月if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i;nongDate[6] = 1;temp = leapDays((int) nongDate[0]);} else {temp = monthDays((int) nongDate[0], i);}// 解除闰月if (nongDate[6] == 1 && i == (leap + 1))nongDate[6] = 0;offset -= temp;if (nongDate[6] == 0)nongDate[4]++;}if (offset == 0 && leap > 0 && i == leap + 1) { if (nongDate[6] == 1) {nongDate[6] = 0;} else {nongDate[6] = 1;--i;--nongDate[4];}}if (offset < 0) {offset += temp;--i;--nongDate[4];}nongDate[1] = i;nongDate[2] = offset + 1;return nongDate;}public final static String getChinaDate(int day) { String a = "";if (day == 10)return"初十";if (day == 20)return"二十";if (day == 30)return"三十";int two = (int) ((day) / 10);if (two == 0)a = "初";if (two == 1)a = "十";if (two == 2)a = "廿";if (two == 3)a = "三";int one = (int) (day % 10);switch (one) {case 1:a += "一";break;case 2:a += "二";break;case 3:a += "三";break;case 4:a += "四";break;case 5:a += "五";break;case 6:a += "六";break;case 7:a += "七";break;case 8:a += "八";break;case 9:a += "九";break;}return a;}public static String today() {Calendar today = Calendar.getInstance(Locale.SIMPLIFIED_CHINESE);int year = today.get(Calendar.YEAR);int month = today.get(Calendar.MONTH) + 1;int date = today.get(Calendar.DATE);long[] l = calElement(year, month, date);StringBuffer sToday = new StringBuffer();try {sToday.append(sdf.format(today.getTime()));sToday.append(" \n");sToday.append(" \n");sToday.append(" \n");sToday.append(" 农历");sToday.append(cyclical(year));sToday.append('(');sToday.append(AnimalsYear(year));sToday.append(")年");sToday.append(" \n");sToday.append(" ");sToday.append(nStr1[(int) l[1]]);sToday.append("月");sToday.append(getChinaDate((int) (l[2])));return sToday.toString();} finally {sToday = null;}}private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年M月d日 EEEEE");public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) { }}。
java的crontab表达式

java的crontab表达式Java的Crontab表达式是一种用于定时执行任务的语法格式,它可以让程序在规定的时间点自动执行。
在Java中,我们可以使用Quartz框架来实现Crontab表达式的功能。
我们来看一下Crontab表达式的基本语法格式。
一个Crontab表达式由6个字段组成,分别表示分钟、小时、日期、月份、星期几和要执行的命令或任务。
每个字段都有一些特定的取值范围或通配符,来指定任务的执行时间。
例如,下面是一个简单的Crontab表达式示例:```0 0 12 * * ? // 每天中午12点执行```在这个表达式中,第一个字段表示分钟,取值范围是0-59;第二个字段表示小时,取值范围是0-23;第三个字段表示日期,取值范围是1-31;第四个字段表示月份,取值范围是1-12;第五个字段表示星期几,取值范围是1-7,其中1表示星期日,2表示星期一,以此类推;最后一个字段是要执行的命令或任务。
除了具体的数字以外,Crontab表达式还支持一些特殊的字符和通配符,来表示更灵活的任务执行时间。
首先是通配符“*”,它可以表示任意的取值范围。
例如,下面的表达式表示每分钟都执行:```* * * * * ?```接下来是逗号“,”,它可以用来分隔多个取值。
例如,下面的表达式表示每天的上午10点和下午2点都执行:```0 0 10,14 * * ?```然后是连字符“-”,它可以用来表示一个范围。
例如,下面的表达式表示每天上午9点到下午6点之间每个小时执行一次:```0 0 9-18 * * ?```还有“/”符号,它可以用来表示间隔时间。
例如,下面的表达式表示每隔5分钟执行一次:```0 */5 * * * ?```除了上述的基本语法外,Crontab表达式还支持一些其他的操作符和特殊字符,例如“L”表示最后的取值,例如星期字段中的“5L”表示最后一个星期四;“W”表示最近的工作日,例如日期字段中的“15W”表示最近的下一个工作日;“#”表示每月的第几个星期几,例如日期字段中的“6#3”表示每月的第三个星期五。
JAVA处理日期时间常用方法

JA V A处理日期时间常用方法:java.util.CalendarCalendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期提供了一些方法。
瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970 年 1 月1 日的00:00:00。
000,格里高利历的偏移量.例:Calendar cal = Calendar。
getInstance(;//使用默认时区和语言环境获得一个日历。
cal。
add(Calendar.DAY_OF_MONTH, -1;//取当前日期的前一天。
cal。
add(Calendar。
DAY_OF_MONTH, +1;//取当前日期的后一天。
//通过格式化输出日期java.text.SimpleDateFormat format = new java.text。
SimpleDateFormat(”yyyy-MM—dd";System。
out.println("Today is:”+format。
format(Calendar.getInstance(.getTime (;System。
out.println("yesterday is:"+format.format(cal.getTime(;得到2007—12-25日期: Calendar calendar = new GregorianCalendar(2007,11, 25,0,0,0;Date date = calendar.getTime(;System。
out.println("2007 Christmasis:”+format.format(date;//java月份是从0—11,月份设置时要减1。
//GregorianCalendar构造方法参数依次为:年,月—1,日,时,分,秒。
非固定时间段统计数字方法 java

非固定时间段统计数字方法 java以非固定时间段统计数字方法 Java概述:在开发过程中,我们经常需要对一段时间内的数据进行统计分析。
而有些情况下,这段时间并不是固定的,而是根据具体需求而定。
本文将介绍使用Java语言实现非固定时间段的数字统计方法。
一、需求分析:假设我们有一份销售数据,数据中包含了订单的日期和销售额。
我们需要根据用户的需求,统计一段时间内的销售总额、最高销售额、最低销售额、平均销售额等信息。
二、解决方案:1. 数据准备:我们需要准备好一份包含订单日期和销售额的数据。
可以将数据存储在数据库中,或者使用CSV文件等格式进行存储。
2. 输入时间段:用户需要输入统计的时间段,可以通过命令行参数、GUI界面或者其他方式进行输入。
在本文中,我们假设用户通过命令行参数输入开始日期和结束日期。
3. 数据过滤:根据用户输入的时间段,从数据中筛选出符合条件的记录。
可以使用SQL语句进行数据库查询,或者使用Java的文件读取和日期处理等功能进行筛选。
4. 统计计算:根据筛选出的数据,进行统计计算。
可以使用循环遍历的方式,依次计算销售总额、最高销售额、最低销售额等信息。
同时,记录符合条件的记录数量,以便后续计算平均销售额。
5. 结果输出:将统计结果输出给用户。
可以使用命令行输出、GUI界面展示或者生成报表等方式进行输出。
三、代码实现:以下是使用Java语言实现的示例代码:```javaimport java.util.Date;import java.util.List;public class SalesStatistics {public static void main(String[] args) {// 输入时间段Date startDate = parseDate(args[0]);Date endDate = parseDate(args[1]);// 数据过滤List<Order> orders = filterOrders(startDate, endDate);// 统计计算double totalSales = 0;double maxSales = Double.MIN_VALUE;double minSales = Double.MAX_VALUE;int count = 0;for (Order order : orders) {double sales = order.getSales();totalSales += sales;maxSales = Math.max(maxSales, sales);minSales = Math.min(minSales, sales);count++;}double avgSales = totalSales / count;// 结果输出System.out.println("销售总额:" + totalSales);System.out.println("最高销售额:" + maxSales);System.out.println("最低销售额:" + minSales);System.out.println("平均销售额:" + avgSales);}private static Date parseDate(String dateString) {// 解析日期字符串为Date对象// 省略实现代码return null;}private static List<Order> filterOrders(Date startDate, Date endDate) {// 从数据中筛选出符合时间段的订单// 省略实现代码return null;}private static class Order {private Date date;private double sales;// 省略构造方法和getter/setter方法}}```以上代码是一个简单的示例,可以根据实际需求进行扩展和优化。
java基础常用的方法

java基础常用的方法Java基础常用的方法Java作为一门流行的编程语言,拥有着丰富的基础方法。
本文将介绍一些Java基础常用的方法,帮助读者更好地理解和使用这门语言。
一、字符串处理方法在Java中,字符串是一种常用的数据类型,因此字符串处理方法也是开发中常用到的。
下面是一些常见的字符串处理方法:1. length():返回字符串的长度。
javaString str = "Hello World";int len = str.length(); len的值为112. charAt():返回指定索引位置的字符。
javaString str = "Hello World";char ch = str.charAt(4); ch的值为'o'3. substring():返回指定索引范围内的子串。
javaString str = "Hello World";String subStr = str.substring(6); subStr的值为"World"4. concat():将指定字符串连接到原字符串末尾。
javaString str1 = "Hello";String str2 = "World";String result = str1.concat(str2); result的值为"HelloWorld"5. replace():替换字符串中的指定字符或子串。
javaString str = "Hello World";String newStr = str.replace('o', 'a'); newStr的值为"Hella Warld"6. toUpperCase()和toLowerCase():将字符串转换为大写或小写。
java美式时间格式,日期操作类(DateFormat与SimpleDateFormat)。。。

java美式时间格式,⽇期操作类(DateFormat与SimpleDateFormat)。
1.DateFormat类此类是⼀个⽇期的格式化类,专门格式化⽇期的操作,因为java.util.Date类本⾝就已经包含了完整的⽇期,所以只需要将些⽇期按照⼀些好的格式格式化⼀下显⽰就好了.观察DateFormat类的定义:此类是定义在java.test包中的。
public abstract class DateFormat extends Format但是定义上可以发现,此类是⼀个抽象类,按照以住的思路,直接使⽤其⼦类实例化即可,但是DateFormat 类本⾝的内部提供了可以直接为其实例化的操作。
得到⽇期的DateFormat对象:public static final DateFormat getDateInstance()得到⽇期时间的DateFormat对象:public static final DateFormat getDateTimeInstance()直接使⽤DateFormat类完成Date类的转换功能:public final String format(Date date)美式⽇期格式12345678910111213import java.text.DateFormat ;import java.util.Date ;public class DateDemo03{public static void main(String args[]){DateFormat df1 =null ;// 声明⼀个DateFormatDateFormat df2 =null ;// 声明⼀个DateFormatdf1 = DateFormat.getDateInstance() ;// 得到⽇期的DateFormat对象df2 = DateFormat.getDateTimeInstance() ;// 得到⽇期时间的DateFormat对象System.out.println("DATE:" + df1.format(new Date())) ;// 按照⽇期格式化System.out.println("DATETIME:" + df2.format(new Date())) ;// 按照⽇期时间格式化}};中式⽇期格式(通过Locale对象指定要显⽰的区域,指定的区域是中国)importjava.text.DateFormat ;importjava.util.Date ;importjava.util.Locale ;publicclassDateDemo04{publicstaticvoidmain(String args[]){DateFormat df1 = null;// 声明⼀个DateFormatDateFormat df2 = null;// 声明⼀个DateFormatdf1 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,newLocale("zh","CN")) ;// 得到⽇期的DateFormat对象df2 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,DateFormat.ERA_FIELD,newLocale("zh","CN")) ;// 得到⽇期时间的DateFormat对象System.out.println("DATE:"+ df1.format(newDate())) ;// 按照⽇期格式化System.out.println("DATETIME:"+ df2.format(newDate())) ;// 按照⽇期时间格式化}}; 2.SimpleDateFormat类此类的功能是完成⽇期的显⽰格式化的,例如,在开发中,可以会将⼀种⽇期格式变为另外⼀种⽇期格式,如下所⽰:原始⽇期:2008-10-19 10:11:30.345转换捕⽇期:2008 年 10 ⽉ 19 ⽇ 10 点 11 分 30 秒 345 毫秒但是以上的两个⽇期中⽇期的数字是完全⼀样的,唯⼀不同的是⽇期的显⽰格式不同,所以要想实现这样的转换功能就必须依靠SimpleDateFormat类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章时刻、日期和数字
6.1 Date类
Date a=new Date();
(1)Date类在java.util包中。
使用Date类的无参数构造方法创建的对象能够猎取本地当前时刻。
Date对象表示时刻的默认顺序是星期、月、日、小时、分、秒、年。
例如:Sat Apr 28 21:59:38 CST 2001
(2)我们可能希望按着某种适应来输出时刻,比如时刻的顺序:年月星期日或年月星期日小时分秒。
这时能够使用DataFormat的子类SimpleDateFormat来实现时期的格式化。
SimpleDateFormat有一个常用构造方法:
public SimpleDateFormat(String pattern)。
该构造方法能够用参数pattern指定的格式创建一个对象,该对象调用
format(Date date)
方法格式化时刻对象date。
需要注意的是,pattern中应当含有一些有效的字符序列。
例如:
● y或yy 表示用两位数字输出年份 yyyy表示用4位数字输出年份。
● M或MM 表示用两位数字或文本输出月份,假如想用汉字输出月份,pattern中应连续包含至少3个M,如MMM。
● d或dd 表示用两位数字输出日。
● H或HH 表示用两位数字输出小时。
● m或mm 表示用两位数字输出分。
● s或ss 表示用两位数字输出秒。
● E 表示用字符串输出星期。
在下面的例子dateformat.java中,我们用3种格式输出时刻。
(3)Java日期时刻及其格式化能够用System类的静态方法public static long currentTimeMillis()猎取系统当前时刻,那个时刻是从1970年1月1日0点到目前时刻所走过的毫秒数
(这是一个不小的数)。
另外,也能够依照currentTimeMillis()方法得到的数字,用Date的构造方法Date(long time)来创建一个Date对象。
在下面的例子6.1中,用三种格式输出时刻。
例子 6.1:(效果如图)
import java.util.Date;
import java.text.SimpleDateFormat;
class Example6_1
{
public static void main(String args[])
{
Date nowTime = new Date();
System.out.println(nowTime);
SimpleDateFormat matter1=new
SimpleDateFormat("'time':yyyy年MM月dd日E北京时刻");
System.out.println(matter1.format(nowTime));
SimpleDateFormat matter2=new SimpleDateFormat("北京时刻:yyyy年MM月dd日HH时mm分ss秒");
System.out.println(matter2.format(nowTime));
Date date1 = new Date(1000);
Date date2 = new Date(-1000);
System.out.println(matter2.format(date1));
System.out.println(matter2.format(date2));
System.out.println(new
Date(System.currentTimeMillis()));
}
}
6.2 Calendar类
(1)Calendar类在java.util包中,使用Calendar类的static 方法getlnstance()能够初始化一个日历对象,如:Calendar calendar=Calendar.getlnstance();
然后,calendar对象能够调用方法:
public final void set(int year,int month,int date)
public final void set(int year,int month,int date,int hour,int minute)
public final void set(int year,int month,iht date,int hour;int minute,int second)
(2)将日历翻到任何一个时刻,当参数year取负数时表示公元前
calendar对象调用方法:
public int get(int field)
(3)能够猎取有关年份、月份、小时、星期等信息,参数field 的有效值由Calendar的静态常量指定,例如:
calendar.get(Calendar.MONTH);
返回一个整数,假如该整数是0,表示当前日历是在一月;该整数是1,表示当前日历是在二月等。
(4)日历对象调用:
public long getTimelnMillis()
能够将时刻表示为毫秒。
下面的例子rili.java使用Calendar来表示时刻。
并计罢了2003年和1962年之间相隔的天数。
注意周一是星期0下面的例子monthli输出2004年1月的日历页。