亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

基于java時區轉換夏令時的問題及解決方法

2024-07-13 10:13:38
字體:
來源:轉載
供稿:網友

一.準備知識

1.America/New_York的夏令時時間如下: 包左不包右

2016-3-13, 02:00:00到2016-11-6, 02:00:00 

2017-3-12, 02:00:00到2017-11-5, 02:00:00

2.三字母時區 ID

為了與 JDK 1.1.x 兼容,一些三字母時區 ID(比如 "PST"、"CTT"、"AST")也受支持。

但是,它們的使用被廢棄,這是因為相同的縮寫經常用于多個時區

例如 CST:有4個意思,美國,澳大利亞,中國,古巴時間

3.標準

GMT:Green Mean Time格林威治標準時間,1960年前被作為標準時間參考 GMT+12-->GMT-12

java8的范圍為GMT+18-->GMT-18

UTC:Coordinated Universal Time 時間協調世界時間 ,比GMT精確,在1972年1月1日成為新的標準;UTC,UTC+1,UTC+2...UTC+12,UTC-12...UTC-1

java8的范圍 UTC-18-->UTC+18

DST:Daylight Saving Time 夏令時間,指在夏天的時候,將時鐘撥快一個小時,以提早日光的使用,在英國稱為夏令時間;

目前有110多個國家采用夏令時;

在中國,從1986-1992只實行了6年,之后就取消了;原因如下:

1.中國東西方向跨度很大,而且采用的是統一的東八區,采用夏令時無法兼容東西部;

2.高緯度地區,冬夏晝夜時間變化大;意義不大;

4.表示東八區可以用 : GMT+8或者Etc/GMT-8(剛好相反,為什么呢,因為php開發者認為,東八區比標準時間快8小時,應該減去8小時,于是表示成了這樣。參考的對象不同導致了不同的表示方法;)

5. 中國時區的表示方式

GMT+8
UTC+8
Asia/Harbin 哈爾濱 //中國標準時間
Asia/Chongqing 重慶//中國標準時間
Asia/Chungking 重慶//中國標準時間
Asia/Urumqi 烏魯木齊//中國標準時間
Asia/Shanghai 上海(東8區)//中國標準時間
PRC
Asia/Macao 澳門 //中國標準時間
Hongkong 香港 //香港時間跟中國標準時間一致
Asia/Hong_Kong 香港
Asia/Taipei 臺北(臺灣的) //中國標準時間
新加坡跟中國的時間一樣;
Asia/Singapore
Singapore

6. 標準時區的表示

UTC
UTC+0
UTC-0
GMT 格林尼治標準時間
GMT0 格林尼治標準時間
Etc/GMT 格林尼治標準時間
Etc/GMT+0 格林尼治標準時間
Etc/GMT-0 格林尼治標準時間
Etc/GMT0 格林尼治標準時間
注意:GMT+xx(-xx)有很大的包容性,還可以自動的識別各種時間的表示

二. 時區轉換

環境:java8之前

1.將當前時間轉換為指定時區顯示

@Test public void test() throws Exception {  Date a=new Date();  SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  sf.setTimeZone(TimeZone.getTimeZone("America/New_York"));  //把中國時區轉為了美國紐約時區  System.out.println(sf.format(a)); } 

2.指定時間轉為指定時區顯示

真能正確轉換嗎?好像有個坑,看了看網上的實現

關于夏令時,感覺有點問題

//實現方式1 沒有考慮夏令時  @Test public void test2() throws Exception { /  Date dateTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-11-6 14:00:00");  Date dateTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-10-6 14:00:00");  TimeZone zhong = TimeZone.getTimeZone("GMT+8:00");//中國  TimeZone york = TimeZone.getTimeZone("America/New_York"); //GMT-5  //這里的時區偏移量是固定的,沒有夏令時,錯  long chineseMills = dateTime.getTime() + york.getRawOffset()-zhong.getRawOffset();  Date date = new Date(chineseMills);  System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)); } 
 //實現方式2 你可能回想,用Calendar類的Calendar.DST_OFFSET //還是不對Calendar.DST_OFFSET這個是死的	@Test	public void test3() throws Exception {//		Date time =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-11-6 14:00:00");//		Date time =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-11-6 1:00:00");//		Date time =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-11-6 0:59:00");//		Date time =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-11-6 1:59:59");		Date time =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-11-6 3:00:00");			// 1、取得本地時間:		Calendar cal = Calendar.getInstance();		cal.setTime(time);		cal.setTimeZone(TimeZone.getTimeZone("America/New_York"));		// 2、取得時間偏移量:這個是固定的		int zoneOffset = cal.get(Calendar.ZONE_OFFSET)/(1000*60*60);		// 3、取得夏令時差:這個是固定的,不是根據時間動態判斷,只要時區存在夏令時,就是1		int dstOffset = cal.get(Calendar.DST_OFFSET)/(1000*60*60);				System.out.println(zoneOffset);		System.out.println(dstOffset);		// 4、從本地時間里扣除這些差量,即可以取得UTC時間://		cal.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));		cal.add(Calendar.HOUR, -(zoneOffset + dstOffset));		Date time2 = cal.getTime();		System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time2));		}
//實現方式3 準備工作   // 不是說java會自動替我們處理夏令時嗎	//先來個簡單的測試,看夏令時判斷方法是否是正確,就可以推斷,java的自動處理是否正確	//已知2016年:America/New_York的夏令時時間是: 2016-3-13 02:00:00 到 2016-11-06 01:59:59   @Test 	public void test4() throws Exception { 	//轉換為0時區時間作為參照點 	SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 	sf.setTimeZone(TimeZone.getTimeZone("GMT+0"));//  	Date dateTime=sf.parse("2016-11-6 5:59:59"); 	Date d1=sf.parse("2016-03-13 6:59:59");//false   	Date d2=sf.parse("2016-03-13 7:00:00");//true   	Date d3=sf.parse("2016-11-6 6:59:59");//false   	Date d4=sf.parse("2016-11-6 7:00:00");//false  	//現在發現了,對于夏令時開始的時間判斷確實沒問題,但是對于夏令時的結束時間判斷錯誤,準確說,提前了一個小時判斷了  	//看下面驗證就知道了,那么為什么提前了一個小時,不知道,怎么解決? 目前想到的只能用java8  d3=sf.parse("2016-11-6 5:59:59");//true   d4=sf.parse("2016-11-6 6:00:00");//false   TimeZone york = TimeZone.getTimeZone("America/New_York"); //GMT-5  	  System.out.println("目標時區是否使用了夏令時:"+isDaylight(york, d1));  System.out.println("目標時區是否使用了夏令時:"+isDaylight(york, d2));  System.out.println("目標時區是否使用了夏令時:"+isDaylight(york, d3));  System.out.println("目標時區是否使用了夏令時:"+isDaylight(york, d4)); 	}  //判斷是否在夏令時 private boolean isDaylight(TimeZone zone,Date date) {		return zone.useDaylightTime()&&zone.inDaylightTime(date); }
 //實現方式3  //通過上面的驗證我們知道了系統的判斷是有問題的,通過設置時區,程序自動處理夏令時也不是那么正確,起碼我現在無法理解為什么  @Test	public void test5() throws Exception { 	//中間相隔13個小時  中國+8 紐約-5 	ChangeZone("2016-3-13 14:59:59", "PRC","America/New_York", "yyyy-MM-dd HH:mm:ss");//2016-03-13 01:59:59 	ChangeZone("2016-3-13 15:00:00", "PRC","America/New_York", "yyyy-MM-dd HH:mm:ss");//2016-03-13 03:00:00 	ChangeZone("2016-11-6 13:59:59", "PRC","America/New_York", "yyyy-MM-dd HH:mm:ss");//2016-11-06 01:59:59  //這個結果是不對的,應該02:00:00  ChangeZone("2016-11-6 14:00:00", "PRC","America/New_York", "yyyy-MM-dd HH:mm:ss");//2016-11-06 01:00:00 } 	//具體的實現如下: //思路是沒問題的 public static void ChangeZone(String time, String srcID, String destID, 	 String pattern) throws ParseException { 	 //設置默認時區   TimeZone zone = TimeZone.getTimeZone(srcID); 	 TimeZone.setDefault(zone); 	 Date date = new SimpleDateFormat(pattern).parse(time); 	//設置目標時區 	TimeZone destzone = TimeZone.getTimeZone(destID); 	SimpleDateFormat sdf = new SimpleDateFormat(pattern); 	//設置要格式化的時區 	sdf.setTimeZone(destzone); 	String changTime = sdf.format(date); 	// 獲取目標時區 	System.out.println("修改時區后" + destzone.getID() + "的時間:" + changTime);  }

小結:以上的三種實現方式得到的結果對夏令時都有點問題

三,java8的實現

1.先看看java8的支持時區變化

//jdk8的可用時區	@Test	public void testName1() throws Exception {		//jdk8的所有時區		Set<String> ids = ZoneId.getAvailableZoneIds();		String[] id1 = ids.toArray(new String[ids.size()]);		String idss = Arrays.toString(id1).replace("]", ",]");				System.out.println(ids.size());//少了28個 595				//jdk8之前的所有時區		String[] id2 = TimeZone.getAvailableIDs();		System.out.println(id2.length); //623			//找出沒jdk8中沒有的		for (String id : id2) {			if (!idss.contains(id+",")) {				System.out.print(id+",");			}		}				//結論:jdk8里面的所有時區,在之前 全部都有		//jdk8刪除的時區如下:		//都是一些容易引起歧義的時區表示方法//		 EST, HST, MST, ACT, AET, AGT, ART, AST, BET, BST, CAT, CNT, CST, CTT, EAT, ECT, IET, IST, JST, MIT, NET, NST, PLT, PNT, PRT, PST, SST, VST,				// 但是這些短名稱的其實還是可以使用的,只是支持列表里面沒有了而已		LocalDateTime date = LocalDateTime.ofInstant(Instant.now(),				ZoneId.of(ZoneId.SHORT_IDS.get("PST")));		System.out.println("/nDate = " + date);			}

2.如何添加時區信息呢,或者說轉換

//LocalDate,LocalDateTime,Instant添加時區信息	@Test	public void testName3() {		LocalDate date=LocalDate.now();		//LocalDate添加時區信息		//方式1		ZonedDateTime zone = date.atStartOfDay(ZoneId.of("GMT+08:00"));		System.out.println(zone);		zone = date.atStartOfDay(ZoneId.systemDefault()); 		System.out.println(zone);		//方式2	 LocalDate date2 = LocalDate.now(ZoneId.of("GMT+0"));		System.out.println(date2);				System.out.println("------------------------------------");		//LocalDateTime添加時區信息		LocalDateTime time = LocalDateTime.now();		//方式1		ZonedDateTime zonetime = time.atZone(ZoneId.of("GMT+0"));		//方式2		ZonedDateTime zonetime2=ZonedDateTime.now(ZoneId.of("GMT+0"));		//方式3		LocalDateTime zonetime3 = LocalDateTime.now(Clock.system(ZoneId.of("GMT+0")));		//方式4		ZonedDateTime zonetime4 = ZonedDateTime.of(time, ZoneId.of("GMT+0"));		System.out.println(zonetime); //不變		System.out.println(zonetime2);//變		System.out.println(zonetime3);//變		System.out.println(zonetime4);//不變				System.out.println("------------------------------------");				//Instant時區信息		ZonedDateTime atZone = Instant.now().atZone(ZoneId.of("GMT+0"));		System.out.println(atZone);//變			}

3.如何獲取當前時間的指定時間(測試略)

 //獲取當前時間的指定時區時間,參照點:0時區		public LocalDateTime getCurrentZoneTime(ZoneId dest) {			 Objects.requireNonNull(dest);			 LocalDateTime time2 = LocalDateTime.now(Clock.system(dest));			 			 String zoneDesc = getZoneDesc(TimeZone.getTimeZone(dest));			 System.out.println(dest.getId()+"對應得標準時區:"+zoneDesc);			 System.out.println("目標時區"+dest+"的時間"+time2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));			 return time2;		}
//獲取標準時區,方式1		//在jdk8之前的方法,利用TimeZone	 private static String getZoneDesc(TimeZone destzone) {	 	Objects.requireNonNull(destzone);		 int Offset = destzone.getRawOffset() / (1000 * 60 * 60);		 if (Offset <= 0) {			return "GMT"+String.valueOf(Offset);		 } else {			return "GMT+" + String.valueOf(Offset);		 }	 }
 //java8的方法,方式2,利用ZoneRules	 //得到時區的標準偏移量,ZoneRules.getStandardOffset	 //得到時區的實際偏移量(得到的偏移量會根據夏令時改變)    // 方式1:ZonedDateTime.getOffset	 // 方式2:ZoneRules.getOffset	 private String getZoneDesc2(ZoneId dest) {	 	Objects.requireNonNull(dest);	 	ZoneRules rule=dest.getRules(); 	 	//獲取時區的標準偏移量	 	String standardOffset = rule.getStandardOffset(ZonedDateTime.now(dest).toInstant()).getId();	 	String s = standardOffset.split(":")[0];	 	int Offset = Integer.parseInt(s);	 	//返回方式1:帶小時分鐘//	 	return "GMT"+standardOffset;	 	//返回方式2:只帶小時數	 	if (Offset>0) {	 		return "GMT+"+Offset;			}else{				return "GMT"+Offset;			}	 }	 

4.如何獲取指定時區的指定時間

開始實現上面留下的時區問題啦

同理先看下使用java8的夏令時判斷方法是否正確

  //先手寫個判斷美國的時間是否在夏令時	 public boolean isDaylightTime(LocalDateTime a) {   Objects.requireNonNull(a);   LocalDateTime startDate = a.withMonth(3).toLocalDate().atTime(2, 0);	LocalDateTime startlightDay = startDate.with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.SUNDAY));			//更新為11月	LocalDateTime endDate = a.withMonth(11).toLocalDate().atTime(1, 59,59);	LocalDateTime endlightDay = endDate.with(TemporalAdjusters.dayOfWeekInMonth(1, DayOfWeek.SUNDAY));				if (a.isBefore(startlightDay) || a.isAfter(endlightDay)) {			System.out.println("不在夏令時"+a);			return false;		}			System.out.println("在夏令時"+a);			return true;		}	 	 //其實java8 已經有現成的方法啦,比我的好用	 //傳入指定時間和時區	 public boolean isDaylightTime(LocalDateTime a,ZoneId dest) {	 	ZonedDateTime z1 = a.atZone(dest);	 	//或者這樣轉//	 	ZonedDateTime z2 = ZonedDateTime.of(a, dest);	 	System.out.println(z1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));	 		  ZoneRules rules = dest.getRules();	  boolean flag= rules.isDaylightSavings(z1.toInstant());	  System.out.println(flag);		return flag;	 }

//測試一下,發現java8的夏令時方法判斷完全正確噢

//已知2016年:America/New_York的夏令時時間是: 2016-3-13 02:00:00 到 2016-11-06 01:59:59 //	   (每年3月的第二個星期日,11月的第一個星期日)	 @Test		public void testName() throws Exception {//			LocalDateTime a1=LocalDateTime.now();	 	LocalDateTime a2=LocalDateTime.of(2016, 3, 13, 1, 59,59);			LocalDateTime a3=LocalDateTime.of(2016, 3, 13, 2, 00);			LocalDateTime a4=LocalDateTime.of(2016, 11, 6, 1, 59,59);			LocalDateTime a5=LocalDateTime.of(2016, 11, 6, 2, 0,0);//			isDaylightTime(a2);//			isDaylightTime(a3);//			isDaylightTime(a4);//			isDaylightTime(a5);						System.out.println("=================");			isDaylightTime(a2,ZoneId.of("America/New_York"));//false			isDaylightTime(a3,ZoneId.of("America/New_York"));//true			isDaylightTime(a4,ZoneId.of("America/New_York"));//true			isDaylightTime(a5,ZoneId.of("America/New_York"));//fasle		}

開始實現:

版本1:

//獲取指定時間的 指定時區時間 參照點:默認時區   public LocalDateTime getZongTime(LocalDateTime time,ZoneId dest) {    Objects.requireNonNull(dest);    return getZongTime(time, null, dest);   } 
//不能用2個時區的ZonedDateTime相減,因為這里一旦指定時區,那個時間就是這個時區了  public LocalDateTime getZongTime(LocalDateTime time,ZoneId src,ZoneId dest) {    //難點就是如何求偏移量   //這里使用默認時區,在中國的就是中國,在美國的就是美國,這樣估計更合適    Objects.requireNonNull(dest);    ZonedDateTime z1=null;    if (src==null) {     z1 = time.atZone(ZoneId.systemDefault());    }else{     z1 = time.atZone(src);    }       // 時區及時響應變化    ZonedDateTime z2 = z1.withZoneSameInstant(dest);       System.out.println(dest.getId()+"對應得標準時區:"+getZoneDesc( TimeZone.getTimeZone(dest)));    System.out.println("目標時區"+dest+"的時間"+z2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));    System.out.println("-------------");    return time;  } 

測試如下:

@Test  public void test6() throws Exception {    //預計不在夏令時 2016-03-13 01:59:59    LocalDateTime time4= LocalDateTime.of(2016, 3, 13, 14, 59, 59);    getZongTime(time4,ZoneId.of("America/New_York"));       //預計在夏令時 2016-03-13 03:00:00    LocalDateTime time1= LocalDateTime.of(2016, 3, 13, 15, 00, 00);    getZongTime(time1,ZoneId.of("America/New_York"));        //預計在夏令時 結果呢:2016-11-06 01:59:59    //感覺又失敗了,應該是2016-11-06 02:59:59    //也就是說,此時java8對夏令時的結束處理之前的 方式3 一模一樣,提前了一小時判斷    //即把夏令時結束時間當成了2016-11-6 00:59:59,但是java8的判斷方法是正確的呀,是不是有點奇怪    LocalDateTime time2= LocalDateTime.of(2016, 11, 6, 14, 59, 59);    getZongTime(time2,ZoneId.of("America/New_York"));     //預計不在夏令時2016-11-06 02:00:00    LocalDateTime time3= LocalDateTime.of(2016, 11, 6, 15, 00, 00);    getZongTime(time3,ZoneId.of("America/New_York"));  } 

所以我現在懷疑這種結果到底是不是系統計算問題呢,還是我不了解紐約的習俗呢?

但是還是可以得到我想要的結果的,運用2個方法:

withEarlierOffsetAtOverlap(), withLaterOffsetAtOverlap()

版本2:

    //獲取指定時間的 指定時區時間 參照點:默認時區		public LocalDateTime getZongTime2(LocalDateTime time,ZoneId dest) {			Objects.requireNonNull(dest);			return getZongTime2(time, null, dest);		}		//版本2 		public LocalDateTime getZongTime2(LocalDateTime time,ZoneId src,ZoneId dest) {			 //難點就是如何求偏移量			//這里使用默認時區,在中國的就是中國,在美國的就是美國,這樣估計更合適			 Objects.requireNonNull(dest);			 ZonedDateTime z1=null;			 if (src==null) {				 z1 = time.atZone(ZoneId.systemDefault());			 }else{				 z1 = time.atZone(src);			 }//					 ZonedDateTime z2 = z1.withZoneSameInstant(dest);			 //處理重疊問題			 long hours = Duration.between(z2.withEarlierOffsetAtOverlap(), z2.withLaterOffsetAtOverlap()).toHours();			 z2= z2.plusHours(hours);			 			 System.out.println(dest.getId()+"對應得標準時區:"+getZoneDesc( TimeZone.getTimeZone(dest)));			 System.out.println("目標時區"+dest+"的時間"+z2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));			 System.out.println("-------------");			 return time;		}

測試:OK了

@Test  public void test4() throws Exception {    //預計不在夏令時 2016-03-13 01:59:59   LocalDateTime time4= LocalDateTime.of(2016, 3, 13, 14, 59, 59);   getZongTime2(time4,ZoneId.of("America/New_York"));     //預計在夏令時 2016-03-13 03:00:00   LocalDateTime time1= LocalDateTime.of(2016, 3, 13, 15, 00, 00);   getZongTime2(time1,ZoneId.of("America/New_York"));      //預計在夏令時 2016-11-06 02:59:59   LocalDateTime time2= LocalDateTime.of(2016, 11, 6, 14, 59, 59);   getZongTime2(time2,ZoneId.of("America/New_York"));   //預計不在夏令時2016-11-06 02:00:00   LocalDateTime time3= LocalDateTime.of(2016, 11, 6, 15, 00, 00);   getZongTime2(time3,ZoneId.of("America/New_York"));      } 

結果:

America/New_York對應得標準時區:GMT-5
目標時區America/New_York的時間2016-03-13 01:59:59

-------------

America/New_York對應得標準時區:GMT-5
目標時區America/New_York的時間2016-03-13 03:00:00

-------------

America/New_York對應得標準時區:GMT-5
目標時區America/New_York的時間2016-11-06 02:59:59

-------------

America/New_York對應得標準時區:GMT-5
目標時區America/New_York的時間2016-11-06 02:00:00

-------------

以上這篇基于java時區轉換夏令時的問題及解決方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美麻豆久久久久久中文| 亚洲精品理论电影| 亚洲老头同性xxxxx| 久久久久久久亚洲精品| 欧美国产日本高清在线| 91免费国产视频| 欧美高清理论片| 国产在线98福利播放视频| 亚洲成人在线网| 日韩中文视频免费在线观看| 欧美日韩黄色大片| 日韩欧美在线中文字幕| 欧美放荡办公室videos4k| 久久精品99无色码中文字幕| 亚洲人成网站免费播放| 久久理论片午夜琪琪电影网| 日韩在线观看电影| 国产日韩欧美在线播放| 国产精品丝袜白浆摸在线| 亚洲女同性videos| 亚洲人在线观看| 国内精品伊人久久| 国产日韩在线亚洲字幕中文| 亚洲人成电影网站色xx| 国产成人一区二区三区| 久久亚洲一区二区三区四区五区高| 91老司机在线| 日韩av网站导航| 亚洲的天堂在线中文字幕| 欧美亚洲在线视频| 久久久久久高潮国产精品视| 色樱桃影院亚洲精品影院| 中文字幕日韩欧美在线| 国产日韩欧美在线| 热门国产精品亚洲第一区在线| 亚洲欧美一区二区三区情侣bbw| 久久久av亚洲男天堂| 日韩欧美中文第一页| 中文国产成人精品久久一| 一本色道久久88精品综合| 日韩电影中文字幕| 在线播放日韩欧美| 亚洲乱码国产乱码精品精天堂| 欧美—级高清免费播放| 国产精品免费久久久久久| 欧美夫妻性生活视频| 久久免费精品视频| 欧美亚洲国产视频| 欧美一区三区三区高中清蜜桃| 91精品国产高清久久久久久91| 日韩精品中文字| 中文在线资源观看视频网站免费不卡| 国产精品国产三级国产aⅴ9色| 91欧美激情另类亚洲| 久久久久久久久久久国产| 91国产视频在线播放| 色噜噜国产精品视频一区二区| 亚洲午夜性刺激影院| 久久综合久久八八| 国产日韩在线精品av| 亚洲美女av在线播放| 日韩av中文字幕在线播放| 久久伊人色综合| 成人福利免费观看| 91成人在线视频| 蜜臀久久99精品久久久无需会员| 欧美成人免费播放| 亚洲免费高清视频| 久久精品影视伊人网| 久久中文字幕视频| 亚洲国产97在线精品一区| 国产精品第七影院| 日韩高清电影好看的电视剧电影| 蜜臀久久99精品久久久久久宅男| 国产欧美在线视频| 欧美国产日韩视频| 日韩网站在线观看| 欧美高清第一页| 91性高湖久久久久久久久_久久99| 午夜欧美不卡精品aaaaa| 亚洲黄色www网站| 国产精品成av人在线视午夜片| 在线成人免费网站| 欧美精品一区二区免费| 亚洲第一精品久久忘忧草社区| 欧美电影《睫毛膏》| 欧美巨猛xxxx猛交黑人97人| 97在线视频精品| 亚洲18私人小影院| 亚洲黄色免费三级| 久久久av一区| 国产精品福利在线观看| 俺去啦;欧美日韩| 亚洲第一二三四五区| 国产精品久久久久影院日本| 在线中文字幕日韩| 日韩激情片免费| 欧美大尺度激情区在线播放| 插插插亚洲综合网| yw.139尤物在线精品视频| 国产精品日本精品| 午夜剧场成人观在线视频免费观看| 亚洲欧美变态国产另类| 亚洲欧洲日本专区| 国产精品美腿一区在线看| 国产在线高清精品| 久久久国产在线视频| 亚洲精品国产美女| 久久成人这里只有精品| 成人黄色中文字幕| 成人有码在线视频| 欧美中文字幕在线观看| 国产精品爽爽爽爽爽爽在线观看| 欧美高清一级大片| 国语自产偷拍精品视频偷| 久久香蕉国产线看观看av| www.亚洲一区| 欧美精品在线视频观看| 日韩在线观看免费av| 国内偷自视频区视频综合| 日韩毛片在线观看| 亚洲精品99久久久久| 亚洲毛片在线观看| 97在线看免费观看视频在线观看| 日av在线播放中文不卡| 欧日韩不卡在线视频| 亚洲精品久久久久中文字幕欢迎你| 欧美激情一区二区三区成人| 在线亚洲男人天堂| 在线观看国产成人av片| 国产亚洲精品美女| 97视频人免费观看| 欧美美女15p| 欧日韩在线观看| 亚洲国产91精品在线观看| 国产91色在线|| 欧美精品18videosex性欧美| 韩日欧美一区二区| 国产精品欧美一区二区三区奶水| 国产精品丝袜视频| 亚洲女同精品视频| 国产精品久久久久影院日本| 久久久久久国产精品三级玉女聊斋| 91精品久久久久久久久青青| 在线播放亚洲激情| 亚洲加勒比久久88色综合| 亚洲精品电影网在线观看| 2019中文字幕在线免费观看| 97热在线精品视频在线观看| 国产精品久久久久久久久免费| 91在线高清免费观看| 亚洲欧美一区二区三区在线| 精品国产欧美一区二区五十路| 久久精品国产成人| 欧美激情欧美狂野欧美精品| 亚洲精品999| 久久久久久国产精品美女| 久久视频在线看| 欧美激情一区二区三区久久久| 亚洲欧美日韩国产精品| 亚洲3p在线观看| 中文字幕久久久| 国产精品美女久久| 国产精品 欧美在线|