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类。
J2ME中时间的使用
时间处理在程序开发中相当常见,下面对于时间处理做一个简单的说明。
一、时间的表达方式时间在J2ME中有两种表达方式:1、以和GMT1970年1月1号午夜12点和现在相差的毫秒数来代表这种方式适合比较两个时间之间的差值。
2、以对象的形式来表达二、时间处理的相关类时间处理在J2ME中涉及三个类:1、System类long time = System. currentTimeMillis();使用该方法可以获得当前时间,时间的表达方式为上面提到的第一种。
2、Date类Date date = new Date();获得当前时间,使用对象的形式来进行表达。
3、Calendar类Calendar calendar = Calendar. getInstance();三、时间处理的具体操作1、以上三种表达方式的转换:a)将System类获得的时间转换为Date对象Date date = new Date(System. currentTimeMillis());b)将Date类型的对象转换为Calendar类型的对象Calendar calendar = Calendar. getInstance();Date date = new Date();calendar.setTime(date);2、使用Calendar完成一些日期操作:Calendar是时间处理中最常用也是功能最强大的类,可以用它来获得某个时间的日期、星期几等信息。
获得日期:获得日期:Calendar calendar = Calendar. getInstance();……int day = calendar.get(Calendar. DATE);获得日期、年份、星期的操作和这个类似。
需要注意的是:Calendar中表示月份的数字和实际相差1,即1月用数字0表示,2月用数字1表示,……12月用数字11表示。
参考资料:/224/2204224.shtml======================================================================j2me中是通过Date和Calendar两个类来对日期进行完整操作的。
Java的发展史——JDK各版的发布时间表
Java的发展史——JDK各版的发布时间表1.Java发展的时间表。
(版本号名称中文名发布日期)2.3.JDK 1.1.4 Sparkler 宝石1997-09-124.5.JDK 1.1.5 Pumpkin 南瓜1997-12-136.7.JDK 1.1.6 Abigail 阿比盖尔--女子名1998-04-248.9.JDK 1.1.7 Brutus 布鲁图--古罗马政治家和将军1998-09-2810.11.JDK 1.1.8 Chelsea 切尔西--城市名1999-04-0812.13.J2SE 1.2 Playground 运动场1998-12-0414.15.J2SE 1.2.1 none 无1999-03-3016.17.J2SE 1.2.2 Cricket 蟋蟀1999-07-0818.19.J2SE 1.3 Kestrel 美洲红隼2000-05-0820.21.J2SE 1.3.1 Ladybird 瓢虫2001-05-1722.23.J2SE 1.4.0 Merlin 灰背隼2002-02-1324.25.J2SE 1.4.1 grasshopper 蚱蜢2002-09-1626.27.J2SE 1.4.2 Mantis 螳螂2003-06-2628.29.J2SE 5.0 (1.5.0) Tiger 老虎2004-1030.31.J2SE 6.0 (Beta) Mustang 野马2006-0432.33.从这个表中我们可以看出一个非常有意思的现象,就是JDK的每一个版本号都使用一个开发代号表示(就是表中的中文名)。
而且从JDK1.2.2开始,主要版本(如1.3,1.4,5.0)都是以鸟类或哺乳动物来命名的. 而它们的bug修正版本(如1.2.2,1.3.1,1.4.2)都是以昆虫命名的。
34.35.1995年5月23日,Java语言诞生36.1996年1月,第一个JDK-JDK1.0诞生37.1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术38.1996年9月,约8.3万个网页应用了JAVA技术来制作39.1997年2月18日,JDK1.1发布40.1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录41.1997年9月,JavaDeveloperConnection社区成员超过十万42.1998年2月,JDK1.1被下载超过2,000,000次43.1998年12月8日,JAVA2企业平台J2EE发布44.1999年6月,SUN公司发布Java的三个版本:标准版、企业版和微型版(J2SE、J2EE、J2ME)45.2000年5月8日,JDK1.3发布46.2000年5月29日,JDK1.4发布47.2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机48.2001年9月24日,J2EE1.3发布49.2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升。
日期和时间
2、使用Calendar类代表指定的时间
Calendar c1 = Calendar.getInstance(); c1.set(2009, 3 - 1, 9); set方法的声明为: public final void set(int year,int month,int date) 以上示例代码设置的时间为2009年3月9日,其参数 的结构和Date类不一样。Calendar类中年份的数 值直接书写,月份的值为实际的月份值减1,日期 的值就是实际的日期值。 如果只设定某个字段,例如日期的值,则可以使用 如下set方法: public void set(int field,int value)
在该方法中,参数field代表要设置的字段的类型,常见类型 如下: Calendar.YEAR——年份 Calendar.MONTH——月份 Calendar.DATE——日期 Calendar.DAY_OF_MONTH——日期,和上面的字段完 全相同 Calendar.HOUR——12小时制的小时数 Calendar.HOUR_OF_DAY——24小时制的小时数 Calendar.MINUTE——分钟 Calendar.SECOND——秒 Calendar.DAY_OF_WEEK——星期几 后续的参数value代表,设置成的值。例如: c1.set(Calendar.DATE,10); 该代码的作用是将c1对象代表的时间中日期设置为10号,其 它所有的数值会被重新计算,例如星期几以及对应的相对 时间数值等。
三、DateFormat
在java中,用java.util.Date中new Date() 可以得到当前时间,但时间的格式可能不 是我们想要的格式,抽象类 java.text.DateFormat 和它的一个具体子 类,java.text.SimpleDateFormat可以把时间 格式化成我们想要的格式。
JAVA日期时间的计算
JAVA日期时间的计算最近,手头有不少项目,其中就有一个类似公文流转的项目,其中有一个模块是任务的制定,而在任务的类型中有一个循环任务,就是用户输入任务的开始日期、结束日期,还需要输入一个周期数,比如每周的星期几、每月的多少号等,这里面就牵扯到JAVA日期时间的计算,从网上收集了一下,整理下来,供大家参考^_^Java 语言的Calendar,GregorianCalendar (日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象。
学习日期, 日期格式, 日期的解析和日期的计算。
我们将讨论下面的类:1、具体类(和抽象类相对)java.util.Date2、抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat3、抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar 具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类.1. java.util.Date及其格式化Date 类从Java 开发包(JDK) 1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了, 我们将在本文中进一步讨论它. 这种改进旨在更好的处理日期数据的国际化格式. 就象在JDK 1.1中一样, Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1 月1日00:00:00这一刻之前或者是之后经历的毫秒数.1.1. 创建java.util.DateJava统计从1970年1月1日起的毫秒的数量表示日期。
java万年历源代码(可运行)
private JScrollPane sp = new JScrollPane(table);
private JButton bLastYear = new JButton("上一年");
p3.add(jsp, BorderLayout.CENTER);
p3.add(p2, BorderLayout.SOUTH);
p3.add(ld, BorderLayout.NORTH);
private JTextArea jta = new JTextArea(); //jta--JTextArea
private JScrollPane jsp = new JScrollPane(jta);
private JLabel l = new JLabel("年份文本框中可直接键入要查找的年份,以提高查询效率");
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
//import java.sql.Date;
cld.set(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1])-1, 0);
showCalendar(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1]), cld);
java-日期时间及正则表达式
java-⽇期时间及正则表达式⽇期时间java.util包提供了Date类来封装当前的⽇期和时间。
Date类提供两个构造函数来实例化Date对象。
第⼀个构造函数使⽤当前⽇期和时间来初始化对象。
Date( )第⼆个构造函数接收⼀个参数,该参数是从1970年1⽉1⽇起的微秒数。
Date(long millisec)实例:Date d = new Date();System.out.print(d.toString());//Fri May 22 09:17:12 CST 2015创建test类,创建Date对象,打印当前时间格式化⽇期SimpleDateFormat是⼀个以语⾔环境敏感的⽅式来格式化和分析⽇期的类。
SimpleDateFormat允许你选择任何⽤户⾃定义⽇期时间格式来运⾏实例:Date dNow = new Date( );SimpleDateFormat ft =new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");System.out.println("Current Date: " + ft.format(dNow));//Current Date: 2015-05-22 09:29:48printf⽅法可以很轻松地格式化时间和⽇期。
使⽤两个字母格式,它以t开头并且以下⾯表格中的⼀个字母结尾.// 初始化 Date 对象Date date = new Date();// 使⽤toString()显⽰⽇期和时间String str = String.format("Current Date/Time : %tc", date );System.out.printf(str);printf:⽇期和时间转换字符字符描述c 完整的⽇期和时间F ISO 8601 格式⽇期D U.S. 格式⽇期 (⽉/⽇/年)T 24⼩时时间r 12⼩时时间R 24⼩时时间,不包含秒Y 4位年份(包含前导0)y 年份后2位(包含前导0)C 年份前2位(包含前导0)B ⽉份全称b ⽉份简称n 2位⽉份(包含前导0)d 2位⽇⼦(包含前导0)e 2位⽇⼦(不包含前导0)A 星期全称a 星期简称j 3位年份(包含前导0)H 2位⼩时(包含前导0), 00 到 23k 2位⼩时(不包含前导0), 0 到 23I 2位⼩时(包含前导0), 01 到 12l 2位⼩时(不包含前导0), 1 到 12M 2位分钟(包含前导0)S 2位秒数(包含前导0)L 3位毫秒(包含前导0)N 9位纳秒(包含前导0)P ⼤写上下午标志p ⼩写上下午标志z 从GMT的RFC 822数字偏移Z 时区s ⾃ 1970-01-01 00:00:00 GMT的秒数Q ⾃ 1970-01-01 00:00:00 GMT的毫妙正则表达式概念正则表达式定义了字符串的模式。
java中date类的常用方法
java中date类的常用方法Java中的Date类是用于表示日期和时间的类,它提供了一系列常用的方法来处理日期和时间的操作。
下面将介绍Date类的一些常用方法。
1. getDate():获取当前日期的天数。
返回值为一个整数,范围从1到31。
2. getMonth():获取当前日期的月份。
返回值为一个整数,范围从0到11,其中0表示一月,11表示十二月。
3. getYear():获取当前日期的年份。
返回值为一个整数,表示当前年份减去1900。
4. getDay():获取当前日期是星期几。
返回值为一个整数,范围从0到6,其中0表示星期日,1表示星期一,以此类推。
5. getHours():获取当前时间的小时数。
返回值为一个整数,范围从0到23。
6. getMinutes():获取当前时间的分钟数。
返回值为一个整数,范围从0到59。
7. getSeconds():获取当前时间的秒数。
返回值为一个整数,范围从0到59。
8. getTime():获取当前日期和时间的毫秒数。
返回值为一个长整型数字,表示从1970年1月1日00:00:00 GMT到当前日期和时间的毫秒数。
9. setTime():设置日期和时间。
接受一个长整型参数,表示从1970年1月1日00:00:00 GMT到所设置日期和时间的毫秒数。
10. after(Date date):判断当前日期是否在指定日期之后。
返回值为一个布尔值,如果当前日期在指定日期之后,则返回true,否则返回false。
11. before(Date date):判断当前日期是否在指定日期之前。
返回值为一个布尔值,如果当前日期在指定日期之前,则返回true,否则返回false。
12. compareTo(Date date):比较当前日期和指定日期的顺序。
返回值为一个整数,如果当前日期在指定日期之前,则返回负数;如果当前日期等于指定日期,则返回0;如果当前日期在指定日期之后,则返回正数。
java dateformat用法
java dateformat用法DateFormat类用于格式化日期和时间,它可以将一个Date对象格式化为日期/时间字符串。
DateFormat是抽象类,无法直接实例化,但可以使用它提供的子类SimpleDateFormat来实例化得到DateFormat对象,然后用这个实例来格式化日期和时间。
SimpleDateFormat类在实例化时可以接收一个模式字符串作为参数,用来指定自己的日期和时间格式,这其中主要表示长度和月份的格式化字符串如下:G:符号表示时代标志,如公元y:表示一年中的年份M:表示一个月,在M之前可以跟数字来表示M表示的长度h:表示一小时中的小时数m:表示一分钟中的分钟数z:表示时区例如,“yyyy-MM-dd”就表示4位年,2位月,2位日;“yyyy-MM-dd hh:mm:ss”就表示4位年,2位月,2位日,2位小时,2位分钟,2位秒。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String dateStr = sdf.format(new Date());System.out.println(dateStr);该程序的运行结果为:2018-05-17DateFormat的parse()方法也接收一个日期字符串作为参数,返回一个Date对象,用它可以把一个字符串解析成日期对象,例如下面程序:该程序的运行结果可以是Wed May 16 00:00:00 CST 2018或其他日期字符串。
SimpleDateFormat还提供了一些常用的日期格式,如:SHORT:短格式,如“M/d/yy”MEDIUM:中等格式,如“MMM d, yyyy”LONG:长格式,如“MMMM d, yyyy”FULL:全格式,如“EEEE, MMMM d, yyyy”它们的用法是:DateFormat格式化日期和时间时,还可以使用其静态方法来构造DateFormat对象:getDateTimeInstance() 可以接收两个整形参数,前者是日期样式(DateFormat常量),后者是时间样式,例如下面的程序可以打印出格式为“5 月 16 日下午 8 时 21 分 11 秒”的日期字符串:还可以使用Calendar类来强制指定日期,例如下面的程序打印出的日期字符串是“2018 年 5 月 17 日星期四上午 8 时 48 分 28 秒”:。
第5、6章-java2实用教程PPT课件
ng,java.io,java.math,java.util
java.applet,java.awt,java.awt.datatransfer
java.awt.event,java.awt.image,java.beans
,java.rmi,java.security,java.sql等
第五、六章 Java基础类
-字符串、日期、时间、数字
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java 基础类库简介
(Java2实用教程-4.18、第5、6章)
Java基础类库
– Java提供了用于语言开发的类库,称为
包 的 应 用
Java基础类库(JFC,Java Foundational Class) , 也称应用程序编程接口(API,Application Programming Interface),分别放在不同的包中
包
的类,包括
的
Object类
应
数据类型包裹类(the Data Type Wrapper)
用
字符串类(String、StringBuffer)
数学类(Math)
系统和运行时类(System、Runtime)
类操作类
.
4
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java基础类库简介(续)
– Float.parseFloat(“123.11”) //返回float型
– Long.parseLong(“123456”) //返回long型
.
8
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java基础类库简介(续) (参加补充章节) ——常量字符串类String
JAVA万年历系统课程设计报告附源码
2013-2014学年第二学期《面向对象程序设计》课程设计报告题目:万年历系统专业:计算机科学与技术班级:姓名:学号:指导教师:成绩:计算机与信息工程系2014年6月6日目录1设计内容及要求设计内容万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用。
在我设计的万年历中主要有:(1)使用图形用户界面来查询用用户所需的日期信息,符合日常软件使用规范。
(2)按月份查询,实现了显示查询1901~2100年某月所有日期的阴阳历对照。
(3)并且添加了重大节日与星座等信息,界面采用日常的星期与月份结合的格式,方便查看与使用。
(4)编写万年历的课程设计,是为了使同学们更加了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
设计任务及具体要求利用JAVA语言编写的万年历系统采用了多种JAVA语句来实现多种功能。
用户可以通过本程序的applet运行界面来查找一整年某月的农历和阳历,可以查找用户所想了解的某一天具体为星期几,并且可以看到一些重大节日的具体时间。
要求:满足设计万年历系统的目的,即当用户查询年份与月份时,系统就要将这一年的某一月份的阴历与阳历全部显示出来,并且附带这一月份的重大节日。
当用户随意改动年份或月份时系统自动显示与星期对应的日期。
用户点击日期时系统会显示具体星座信息。
2概要设计程序设计思路(1)总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。
然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。
教你如何用Java根据日期生成流水号
教你如何⽤Java根据⽇期⽣成流⽔号前⾔⽣成流⽔号,在企业中可以说是⽐较常见的需求,尤其是订单类业务。
⼀般来说,需要保证流⽔号的唯⼀性。
如果没有长度和字符的限制,那么直接使⽤UUID⽣成⼀个唯⼀字符串即可,也可以直接使⽤数据库表中的主键,主键就是唯⼀的。
那么,如果限制了流⽔号必须多少位,这种怎么⽣成呢?可以采⽤"前缀+⽇期+数字"的⽅式(ps:此⽅式是需要⽤到缓存的)前缀:为了更好的标识这个流⽔号是属于哪种类型;⽇期:为了防⽌重复;数字:为了表⽰当前的流⽔所处序号。
需求:⽣成⼀个17位数的唯⼀流⽔号,“LSH”+yyyyMMdd+6位数字代码实现import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.concurrent.atomic.AtomicInteger;public class SerialNoTest {public static void main(String[] args) {String serialNo = generateSerialNo();System.out.println("⽣成的流⽔号:"+serialNo);}/*** ⽣成17位唯⼀流⽔号,"LSH"+yyyyMMdd+6位数字* 6位数字,如:000001* @return*/private static String generateSerialNo(){//定义需要返回的流⽔号String serialNo = null;//先查询到今天的⽇期,格式:"yyyyMMdd"String todayDate = new SimpleDateFormat("yyyyMMdd").format(new Date());//固定字母前缀拼接今天⽇期,组成新的完整的前缀,也就是缓存的keyString cacheKey = "LSH"+todayDate;//再通过key查询缓存有没有num数据,缓存操作根据⾃⾝项⽬封装⼯具类Long codeNum = cacheService.getCache(cacheKey, Long.class);//如果缓存查询有值,数值+1,再赋值给下⼀个流⽔号if (null != codeNum) {codeNum = codeNum + 1L;} else {//如果缓存查询没值,直接赋值为1codeNum = 1L;}//流⽔号 = 缓存key + 拼接的数值 = 前缀 + ⽇期 + 拼接的数值serialNo = getCodeOfSix(cacheKey, codeNum.intValue());//设置缓存,调⽤此⽅法,会⾃动将key所对应的value+1,保存时长:今天剩余的时间cacheService.incr(cacheKey, getSeconds());return serialNo;}/*** 将数值拼接成对应的位数* @param prefix 前缀:"LSH"+yyyyMMdd* @param nowNum 当前要⽣成的数字* @return 拼接好的流⽔号*/public static String getCodeOfSix(String prefix,int nowNum ) {//需要返回的codeStringBuilder codeSb = new StringBuilder();//需要拼接的数字StringBuilder numSb = new StringBuilder();//封装的数字对象,⾥⾯ value 加了 volatile关键字,保证了线程安全AtomicInteger count = new AtomicInteger(nowNum);//将数值补⾜为6位字符串if (count.get() < 10) {numSb.append("00000").append(count.get());} else if(count.get() < 100){numSb.append("0000").append(count.get());}else if(count.get() < 1000){numSb.append("000").append(count.get());}else if(count.get() < 10000){numSb.append("00").append(count.get());}else if(count.get() < 100000){numSb.append("0").append(count.get());} else if (count.get() >= 100000) {numSb.append(count.get());}//先拼接前缀codeSb.append(prefix);//再拼接数字codeSb.append(numSb);return codeSb.toString();}/*** 获取当天结束还剩余多少秒* @return*/public static int getSeconds(){//获取今天当前时间Calendar curDate = Calendar.getInstance();//获取明天凌晨0点的⽇期Calendar tommorowDate = new GregorianCalendar(curDate.get(Calendar.YEAR),curDate.get(Calendar.MONTH),curDate.get(Calendar.DATE) + 1,0, 0, 0);//返回明天凌晨0点和今天当前时间的差值(秒数)return (int)(tommorowDate.getTimeInMillis() - curDate .getTimeInMillis()) / 1000;}}假如今天是2021年4⽉22⽇,运⾏项⽬,⽣成的第1个流⽔号则为:LSH20210422000001第2个流⽔号则为:LSH20210422000002,依次类推。
- 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月的日历页。