时间技巧总结

时间技巧:包括验证码有效时间的建立,两个时间差(给出了一个时间到零点的思路),使用  after();  before();  或  compareTo(); 比较时间先后,实时获取时间(不建议,页面获取更佳)

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充;转载请注明出处!

 

import java.awt.BorderLayout;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class test {
	public static void main(String[] args) throws ParseException{
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
		Date startTime = dateFormat.parse("2016-09-01 11:30:00");   
		Date endTime = dateFormat.parse("2016-09-02 13:33:30"); 
		
		timeDemo01();//某个时间前后30分钟
		timeDemo02(startTime, endTime);//两个时间的差/现在时间到今天零点的差
		timeDemo03(dateFormat, startTime, endTime);//判断两个时间的先后/日期是否在有效期内
		TimeDemo04 frame = new TimeDemo04();//获取动态时间,建议页面获取,Java写太费事	
	}
	/**
	 * 获取现在时间前后n分钟的时刻:例这个验证有效时间为30分钟
	 * @throws ParseException
	 */
	public static void timeDemo01() throws ParseException{
		SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
		//方法一:获取现在时间30分钟后的时间
		System.out.println("现在本地时间: " + dateFormat.format(new Date()));//11:33:09//一种获得方法,能省
		
		Calendar calendar = Calendar.getInstance();
		System.out.println("现在本地时间: " + dateFormat.format(calendar.getTime()));//11:33:09
		calendar.add(Calendar.MINUTE,30);
		System.out.println("现在本地时间 + 30分钟: " + dateFormat.format(calendar.getTime()));//11:33:09
		
		//方法二:获取现在时间30分钟前后的时间,不建议,好学习理解
		/*String overDate = "00:30:00";
		long time01 = Long.valueOf(dateFormat.parse(overDate).getTime());
		System.out.println("30分钟long表示为: " + time01);//-27000000
		System.out.println("30分钟表示为: " + new Date(time01));//Thu Jan 01 00:30:00 CST 1970
		
		System.out.println("查看本地时差(加30分钟):" + new Date(1000*60*30));//Thu Jan 01 08:30:00 CST 1970
		long time = Long.valueOf(dateFormat.parse(overDate).getTime())+(8*60*60*1000);//时差
		System.out.println("以本地时间定位,30分钟long表示为: " + time);//1800000
		System.out.println("以本地时间定位,30分钟表示为: " + new Date(time));//Thu Jan 01 08:30:00 CST 1970
		System.out.println("本地时间定位: " + new Date(System.currentTimeMillis()));//Sat Sep 03 10:57:16 CST 2016
		System.out.println("以本地时间定位,30分钟前时间: " + new Date(System.currentTimeMillis()-time));//Sat Sep 03 10:27:16 CST 2016
		System.out.println("以本地时间定位,30分钟后时间: " + new Date(System.currentTimeMillis()+time));//Sat Sep 03 11:27:16 CST 2016
		 */	
		}
	/**
	 * 获取两个时间的差:不是最好,但适合大部分情况,易变通
	 * 获得现在时间到今天零点的差:
	 * 					获得现在时间
	 * 					获得零点时间就是今天时间的 /24*60*60*1000 再乘一次
	 * 					相减就好
	 * long time01 = ( Long.valueOf(System.currentTimeMillis()) / (24*60*60*1000)) * 24*60*60*1000;
		System.out.println( new Date(time01));//当天零点(有时差)看timeDemo01里的方法二
		System.out.println( new Date());//现在时间
	 * @throws ParseException
	 */
	public static void timeDemo02(Date startTime, Date endTime) throws ParseException{   
		long targetTime = (endTime.getTime()-startTime.getTime())/1000;//转换秒为单位
		long day = targetTime / ( 24 * 3600 );   
		long hour= targetTime % ( 24 * 3600 ) / 3600;   
		long minute = targetTime % 3600 / 60;   
		long second = targetTime % 60 / 60;   
		System.out.println("需要获得的目标时间为:" + day + "天" + hour + "小时" + minute + "分" + second + "秒" );  
	}
	/**
	 * 判断时间 travelDate 是否在有效期内
	 * @param dateFormat 传入的日期格式
	 * @param startDate 有效开始日期
	 * @param endDate 有效截止日期
	 * @throws ParseException
	 */
	public static void timeDemo03(SimpleDateFormat dateFormat, Date startDate, Date endDate) throws ParseException{
		Date travelDate = dateFormat.parse("2016-09-02 13:33:00");
		//包括等于的情况,after()与before()不包括等于
		if(travelDate.compareTo(startDate) >= 0 && travelDate.compareTo(endDate) <= 0){
		//if(travelDate.after(startDate) && travelDate.before(endDate)){
			System.out.println("时间  travelDate: " + travelDate + "在 startDate: " + startDate + "与" + " endDate: " + endDate + "内,在要求时间内。");
		}
	}
}
class TimeDemo04 extends JFrame{
	JTextField jTextField01 ;
	public TimeDemo04(){
		this.setTitle("Test");
		this.setSize(500, 500);
		JPanel jpanel = new JPanel();
		jpanel.setLayout(new BorderLayout());
		JTextField jTextField02 = new JTextField();
		jTextField01 = new JTextField(" yyyy-MM-dd HH:mm:ss ");
		jTextField02.setBorder(BorderFactory.createLoweredBevelBorder());
		jTextField01.setBorder(BorderFactory.createLoweredBevelBorder());
		jTextField01.setHorizontalAlignment(JTextField.RIGHT);
		jTextField02.setEditable(false);
		jTextField01.setEditable(false);
		jpanel.add(jTextField02);
		jpanel.add(jTextField01,BorderLayout.EAST);
		jpanel.setBorder(BorderFactory.createEtchedBorder());
		this.add(jpanel,BorderLayout.SOUTH);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Timer t = new Timer();
		t.schedule(new TimeDemo05(), 1000,1000);
	}
	class TimeDemo05 extends TimerTask{
		@Override
		public void run() {
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");		
			String dynamicTime = dateFormat.format(new Date());		
			jTextField01.setText(dynamicTime);
		}	
	}
}

备注:增加一个时间格式的描述

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
 * 工作中遇到时间转换格式问题:时间转换为美英格式
 * @author ChengFengXiaoZhan
 */
public class TimeTest {
	public static void main(String[] args) {
		/*
		 * 英文日期分英式和美式,如下:
		 *  1) 8th March,2009 或8 March,2009(英式)
		 *  2) March 8th,2009 或March 8,2009 (美式)
		 * 日期写法宜遵从下列规则: 
		 * 1)年份必须完全写明,不可用"09代替2009; 
		 * 2)月份必须用英文拼出或采用公认的简写,即 January (Jan.),February (Feb.),March(Mar.),April(Apr.),May,June,July,August (Aug.),September (Sept.),October(Oct.),November(Nov.),December(Dec.); 
		 * 3)日期可用序数词,如:1st,2nd,3rd,4th,...;也可用基数词,如:1,2,3,4,...。但美式大多采用后者; 
		 * 4)在年份和月日之间必须用逗号隔开; 
		 * 5)日期不可全部采用如7.12.2003或7/12/2003的阿拉伯数字书写,否则会引起误解。因为英美在这方面的习惯用法不同。按美国人习惯,上述日期为2003年7月12日,而按英国习惯则是2003年12月7日。
		 * 注:英文日期分英式和美式,请自行选择格式
		 */
		Date date = new Date();
		DateFormat df1 = new SimpleDateFormat("MMM-dd'th', yyyy",Locale.ENGLISH);
		SimpleDateFormat sdf1 = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z", Locale.UK);
		SimpleDateFormat sdf2 = new SimpleDateFormat("dd MMM,yyyy", Locale.UK);
		SimpleDateFormat sdf3 = new SimpleDateFormat("dd'th' MMM,yyyy", Locale.UK);
		System.out.println(df1.format(date));
		System.out.println(sdf1.format(date));
		System.out.println(sdf2.format(date));
		System.out.println(sdf3.format(date));
	}
}

时间展示 SimpleDateFormat

'2019-06-18 10:13:13 am' new SimpleDateFormat("yyyy-MM-dd hh:mm:ss aa", Locale.ENGLISH)

加油!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值