靜以修心

          2012年4月4日

          本來(lái)以為有了date4j就萬(wàn)事無(wú)休了,結(jié)果在工作的時(shí)候發(fā)覺(jué)有不少腳步僅僅需要兩三個(gè)簡(jiǎn)單的class執(zhí)行一下就可以完成任務(wù)了。也就是說(shuō)即使是date4j,相對(duì)于這兩三個(gè)甚至是一個(gè)class來(lái)說(shuō)還是過(guò)于臃腫了。于是乎自己寫(xiě)了個(gè)簡(jiǎn)單的日期封裝類(lèi)。
          主要功能是
          1.獲取當(dāng)前時(shí)間
          2.獲取當(dāng)前年,月,日,時(shí),分,秒
          3.獲取指定日期的年,月,日,時(shí),分,秒
          4.獲取兩個(gè)日期的時(shí)間差(包括年月日時(shí)分秒)
          5.將字符竄類(lèi)型轉(zhuǎn)成java.util.date類(lèi)型
          6.指定日期添加時(shí)間

          package com.kohri.date;

          import java.text.DateFormat;
          import java.text.ParseException;
          import java.text.SimpleDateFormat;
          import java.util.Calendar;
          import java.util.Date;
          import java.util.GregorianCalendar;

          /**
           * @descriped a simple class for date
           * 
          @author Kohri
           * @date 2012/4/22
           * 
          @version 1.0
           
          */
          public class SimpleDate {

              private static String defaultFormat = "yyyy-MM-dd HH:mm:ss";
              private static SimpleDateFormat sf = null ;
              private static Calendar cal = Calendar.getInstance();
              private static Date date = null;

              /**
               * get current date time (default 'yyyy-MM-dd HH:mm:ss')
               * 
          @return string
               
          */
              public static String getDateNow() {
                  sf = new SimpleDateFormat(defaultFormat);
                  String currentTime = "";
                  currentTime = sf.format(new Date());
                  return currentTime;
              }
              
              /**
               * get year (default now) 
               * 
          @return int 
               
          */
              public static int getYear(){
                  int currentYear = cal.get(Calendar.YEAR);
                  return currentYear;
              }
              
              /**
               * get mon (default now) 
               * 
          @return int 
               
          */
              public static int getMonth(){
                  int currentMonth = cal.get(Calendar.MONTH) + 1;
                  return currentMonth;
              }
              
              /**
               * get day of month (default now)
               * 
          @return int 
               
          */
              public static int getDay(){
                  int currentDayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
                  return currentDayOfMonth;
              }
              
              /**
               * get hours (default now)
               * 
          @return int 
               
          */
              public static int getHours(){
                  int currentHours = cal.get(Calendar.HOUR_OF_DAY);
                  return currentHours;
              }
              
              /**
               * get  minutes (default now)
               * 
          @return int 
               
          */
              public static int getMinutes(){
                  int currentMinute = cal.get(Calendar.MINUTE);
                  return currentMinute;
              }

              /**
               * get seconds (default now)
               * 
          @return int 
               
          */
              public static int getSeconds(){
                  int currentSecond = cal.get(Calendar.SECOND);
                  return currentSecond;
              }
              
              /**
               * string change to date
               * 
          @param strDate
               * 
          @param dateFormat
               * 
          @return date
               
          */
              public static Date toDate(String strDate, String dateFormat){
                  if(strDate == null || strDate.length() == 0){
                      return null;
                  }
                  Date date = null;
                  DateFormat df = new SimpleDateFormat(dateFormat);
                  try {
                      date = df.parse(strDate);
                  } catch (ParseException e) {
                      e.printStackTrace();
                  }
                  return date;
              }
              
              /**
               * Returns this Calendar's time value in milliseconds
               * 
          @param p_date
               * 
          @return long
               
          */
              public static long getMillisOfDate(Date date) {
                     cal.setTime(date);
                     return cal.getTimeInMillis();
              }
              
              
              
              /**
               * compare two date 
               * return the greater date 
               * if equals return null
               * 
          @param strStartDate
               * 
          @param strEndDate
               * 
          @return date 
               
          */
              public static Date getGreaterDate(String strStartDate, String strEndDate){
                  Date date = null;
                  Date startDate = toDate(strStartDate, "yyyy-MM-dd");
                  Date endDate = toDate(strEndDate, "yyyy-MM-dd");
                  long startTime = getMillisOfDate(startDate);
                  long endTime = getMillisOfDate(endDate);
                  if((startTime - endTime) > 0){
                      return startDate;
                  }else if((endTime - startTime) > 0){
                      return endDate;
                  }
                  return date;
              }
              
              /**
               * get days between 2 different date
               * 
          @param strStartDate less date (yyyy-MM-dd)
               * 
          @param strEndDate greater date (yyyy-MM-dd)
               * 
          @return long
               
          */
              public static long getDaysOftwoDiffDate(String strStartDate, String strEndDate){
                     Date startDate = toDate(strStartDate, "yyyy-MM-dd");
                     Date endDate = toDate(strEndDate, "yyyy-MM-dd");
                     long startTime = getMillisOfDate(startDate);
                     long endTime = getMillisOfDate(endDate);
                     long betweenDays = (long) ((endTime - startTime) / ( 1000 * 60 * 60 * 24 ));
                     return betweenDays;
              }
              
              /**
               * get weeks between 2 different date
               * 
          @param strStartDate less date (yyyy-MM-dd)
               * 
          @param strEndDate greater date (yyyy-MM-dd)
               * 
          @return long
               
          */
              public static long getWeeksOfTwoDiffDate(String strStartDate, String strEndDate){
                  return getDaysOftwoDiffDate(strStartDate, strEndDate) / 7;
              }
              
              /**
               * get months between 2 different date
               * 
          @param strStartDate less date (yyyy-MM-dd)
               * 
          @param strEndDate greater date (yyyy-MM-dd)
               * 
          @return long
               
          */
              public static long getMonthsOfTwoDiffDate(String strStartDate, String strEndDate){
                  return getDaysOftwoDiffDate(strStartDate, strEndDate) / 30;
              }
              
              /**
               * get years between 2 different date
               * 
          @param strStartDate less date (yyyy-MM-dd)
               * 
          @param strEndDate greater date (yyyy-MM-dd)
               * 
          @return long
               
          */
              public static long getYearsOfTwoDiffDate(String strStartDate, String strEndDate){
                  return getDaysOftwoDiffDate(strStartDate, strEndDate) / 365;
              }
              
              /**
               * add date
               * 
          @param date
               * 
          @param count 
               * 
          @param field Calendar.YEAR(MONTH..)
               * 
          @param format DateFormat(yyyy-MM-dd)
               * 
          @return string
               
          */
              public static String addDate(Date date,int count,int field,String format){
                     cal.setTime(date);
                     int year = getYear();
                     int month = getMonth() - 1;
                     int day = getDay();
                     int hours = getHours();
                     int minutes = getMinutes();
                     int seconds = getSeconds();
                     Calendar calendar = new GregorianCalendar(year, month, day, hours, minutes, seconds);
                     calendar.add(field,count);
                     DateFormat df = new SimpleDateFormat(format);
                     String tmpDate = df.format(calendar.getTime());
                     if(date == null){
          cal.setTime(new Date());
          }else{
          cal.setTime(date);
          }
                     return tmpDate;
              }
              
              /**
               * calendar settime
               * 
          @param date
               
          */
              private static void setCalTime(Date date){
                  if(date != null){
                      cal.setTime(date);
                  }
              }
              
              //setter getter

              public static String getDefaultFormat() {
                  return defaultFormat;
              }

              public static void setDefaultFormat(String defaultFormat) {
                  SimpleDate.defaultFormat = defaultFormat;
              }

              public static Date getDate() {
                  return date;
              }

              public static void setDate(Date date) {
                  SimpleDate.date = date;
                  setCalTime(date);
              }
              

          }
          posted @ 2012-04-25 22:36 kohri 閱讀(1936) | 評(píng)論 (1)編輯 收藏

                在熟悉公司業(yè)務(wù)代碼的時(shí)候經(jīng)常看見(jiàn)有日期處理(date),由于項(xiàng)目轉(zhuǎn)手次數(shù)較多,在這方面沒(méi)合理封裝處理好,于是就想自己封裝一個(gè)date類(lèi)。然而輾轉(zhuǎn)了幾天卻發(fā)覺(jué)已經(jīng)有date4j的存在,于是在這里簡(jiǎn)單地介紹一下這個(gè)日期類(lèi)庫(kù)。以下包括自己的代碼、網(wǎng)上流傳資料、以及date4j官網(wǎng)例子。

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

          java日期處理相關(guān)類(lèi):

          java.util.Date 
          java.sql.Date 
          java.sql.Time 
          java.sql.Timestamp 
          java.util.Calendar 
          java.util.TimeZone

               比較常用的是java.util.date,將java.util.Date轉(zhuǎn)為java.sql.Date的時(shí)候,日期時(shí)分秒會(huì)被去掉,失去精度。而且如果現(xiàn)在翻開(kāi)api看看就發(fā)覺(jué)這兩個(gè)類(lèi)好多方法已經(jīng)過(guò)時(shí),幾近淪為廢物。

               Timestamp能和java.util.date無(wú)損轉(zhuǎn)換,但是在一些預(yù)定義sql中會(huì)常常出問(wèn)題。

          (以上出自 click me

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

          Java本身的日期類(lèi)在JDK1.0版本之后就再也沒(méi)有更新過(guò),同時(shí)還存在著一些眾所周知的問(wèn)題(例如1月從0開(kāi)始,導(dǎo)致了很多月份差一的漏洞)。一份新的Java規(guī)范請(qǐng)求(JSR,Java Specification Request)已經(jīng)被提交,目的就是要解決上述問(wèn)題,此版本的類(lèi)庫(kù)仍處在Alpha版本。在其穩(wěn)定之前,很多開(kāi)發(fā)者還是會(huì)使用Joda Time類(lèi)庫(kù),該類(lèi)庫(kù)與JSR-310的參考實(shí)現(xiàn)類(lèi)似(但不完全相同)。 Date4j為在Java中處理日期提供了一套新的解決方案,但與Joda Time所關(guān)注的范圍完全不同。對(duì)比如下:

          Joda TimeDate4j
          擁有的類(lèi)的數(shù)量: 140+ 擁有的類(lèi)的數(shù)量< 10
          包含可變和不可變類(lèi) 僅包含不可變類(lèi)
          強(qiáng)調(diào)速度和功能 強(qiáng)調(diào)簡(jiǎn)單和有效
          支持格里高里歷(Gregorian)、 科普特語(yǔ)日歷(Coptic)、 伊斯蘭教歷(Islamic)、佛歷(Buddhist)等等 只提供對(duì)格里高里歷的支持
          可以完全取代JDK日期類(lèi) 和JDK日期類(lèi)配合使用
          精確到毫秒級(jí)操作 支持到納秒(十億分之一秒)級(jí)操作
          修復(fù)了天“溢出”的問(wèn)題 天“溢出”的問(wèn)題可配置
          針對(duì)的是通常意義的日期維護(hù) 適用于通過(guò)數(shù)據(jù)庫(kù)來(lái)維護(hù)的日期
          采用Apache 2.0授權(quán)許可 采用BSD授權(quán)許可

          雖然乍一看Date4j只具備了Joda中一部分的特性,但它有兩個(gè)主要的特點(diǎn)是Joda所不具備的。

          首先,Date4j的開(kāi)發(fā)者宣稱類(lèi)庫(kù)不應(yīng)莫名其妙地將日期截?cái)唷oda只支持毫秒級(jí)的精度而且在將來(lái)可能也不會(huì)改善。一些數(shù)據(jù)庫(kù)也已經(jīng)有了更好的解決方案。比如流行的PostgreSQL數(shù)據(jù)庫(kù)對(duì)時(shí)間戳精度就已經(jīng)支持到微秒級(jí)(百萬(wàn)分之一秒)。Date4j可在處理日期時(shí)對(duì)精度毫無(wú)損傷。

          第二個(gè)特征是日期“溢出”的問(wèn)題,例如向某個(gè)日期增加一段時(shí)間后,日期落在下月的情況。最簡(jiǎn)單的例子就是在3月31日增加一個(gè)月的計(jì)算:

          DateTime dt = new DateTime("2011-03-31"); 
          DateTime result = dt.plusMonths(1); (最新版本此方法應(yīng)該已經(jīng)被刪除,只有plus(...)與plusDay())
          System.out.println(result.toString());

          當(dāng)使用Joda Time時(shí),會(huì)輸出4月30日,但這也許并不是你想要的結(jié)果。

          鑒于這種不確定性,Date4j為您提供了4種選擇

          1. 第一天
          2. 最后一天(與Joda Time相同)
          3. 日期順延
          4. 拋出異常

          以上轉(zhuǎn)自 click me
          -----------------------------------------------------------------------------------------------------------------------------------------------------------

          date4j官網(wǎng)&&實(shí)例:


          import hirondelle.date4j.DateTime;
          import hirondelle.date4j.DateTime.DayOverflow;

          import java.util.TimeZone;

          public class Date4jExamples {

              public static void main(String[] args) {
                  Date4jExamples examples = new Date4jExamples();
                  examples.currentDateTime();
                  examples.ageIfBornOnCertainDate();
                  examples.daysTillChristmas();
                  examples.whenIs90DaysFromToday();
                  examples.dateDifference();
                  examples.whenIs3Months5DaysFromToday();
                  examples.hoursDifferenceBetweenParisAndPerth();
                  examples.weeksSinceStart();
                  examples.timeTillMidnight();
                  examples.imitateISOFormat();
                  examples.firstDayOfThisWeek();
                  examples.jdkDatesSuctorial();

              }

              private static void log(Object aMsg) {
                  System.out.println(String.valueOf(aMsg));
              }

              /**   
               * 獲取當(dāng)前時(shí)間 what is the current date-time in the JRE's default time zone
               * ------------------------------------------------------------------------
               * Here are some practical examples of using the above formatting symbols:
               *
               *    Format                                  Output
               *    YYYY-MM-DD hh:mm:ss.fffffffff a     1958-04-09 03:05:06.123456789 AM
               *    YYYY-MM-DD hh:mm:ss.fff a             1958-04-09 03:05:06.123 AM
               *    YYYY-MM-DD                             1958-04-09
               *    hh:mm:ss.fffffffff                     03:05:06.123456789
               *    hh:mm:ss                             03:05:06
               *    YYYY-M-D h:m:s                         1958-4-9 3:5:6
               *    WWWW, MMMM D, YYYY                     Wednesday, April 9, 1958
               *    WWWW, MMMM D, YYYY |at| D a         Wednesday, April 9, 1958 at 3 AM
               *
               *----------------------------------------------------------------------
               * ---
              private void currentDateTime() {
                  DateTime now = DateTime.now(TimeZone.getDefault());
                  String result = now.format("YYYY-MM-DD hh:mm:ss");
                  log("Current date-time in default time zone : " + result);
                  // result Current date-time in default time zone : 2012-04-12 00:55:54
              }

              /**
               * 年齡計(jì)算 what's the age of someone born may 16,1995
               
          */
              private void ageIfBornOnCertainDate() {
                  DateTime today = DateTime.today(TimeZone.getDefault());
                  DateTime birthdate = DateTime.forDateOnly(1995, 5, 16);
                  int age = today.getYear() - birthdate.getYear();
                  // getDayOfYear獲取距離年初的總天數(shù)
                  if (today.getDayOfYear() < birthdate.getDayOfYear()) {
                      age = age - 1;
                  }
                  log("Age of someone born May 16, 1995 is : " + age);
                  // result Age of someone born May 16, 1995 is : 16
              }

              /**
               * 日期相距 How many days till the next December 25
               
          */
              private void daysTillChristmas() {
                  DateTime today = DateTime.today(TimeZone.getDefault());
                  DateTime christmas = DateTime.forDateOnly(today.getYear(), 12, 25);
                  int result = 0;
                  if (today.isSameDayAs(christmas)) {
                      // do nothing
                  } else if (today.lt(christmas)) {
                      result = today.numDaysFrom(christmas);
                  } else if (today.gt(christmas)) {
                      DateTime christmasNextYear = DateTime.forDateOnly(
                              today.getYear() + 1, 12, 25);
                      result = today.numDaysFrom(christmasNextYear);
                  }
                  log("Number of days till Christmas : " + result);
                  // result Number of days till Christmas : 257
              }

              /**
               * What day is 90 days from today
               
          */
              private void whenIs90DaysFromToday() {
                  DateTime today = DateTime.today(TimeZone.getDefault());
                  log("90 days from today is : "
                          + today.plusDays(90).format("YYYY-MM-DD"));
                  // result 90 days from today is : 2012-07-11
              }

              /**
               * 日期相差
               
          */
              private void dateDifference() {
                  // DayOverflow.Abort result throw Exception
                  
          // DayOverflow.Spillover result 2011-05-01
                  
          // DayOverflow.LastDay result 2011-04-30
                  
          // DayOverflow.FirstDay result 2011-05-01
                  
          // public enum DayOverflow {
                  
          /** Coerce the day to the last day of the month. */
                  
          // LastDay,
                 
           /** Coerce the day to the first day of the next month. */
                  
          // FirstDay,
                  
          /** Spillover the day into the next month. */
                  
          // Spillover,
                 
          /** Throw a RuntimeException. */
                  
          // Abort;
                  
          // }
                  /**
                   * 
          @param aNumYears
                   *            positive, required, in range 09999
                   * 
          @param aNumMonths
                   *            positive, required, in range 09999
                   * 
          @param aNumDays
                   *            positive, required, in range 09999
                   * 
          @param aNumHours
                   *            positive, required, in range 09999
                   * 
          @param aNumMinutes
                   *            positive, required, in range 09999
                   * 
          @param aNumSeconds
                   *            positive, required, in range 09999 method plus(Integer
                   *            aNumYears, Integer aNumMonths, Integer aNumDays, Integer
                   *            aNumHours, Integer aNumMinutes, Integer aNumSeconds,
                   *            DayOverflow aDayOverflow)
                   * 
                   
          */
                  DateTime dt = new DateTime("2011-03-31");
                  DateTime result = dt.plus(0, 1, 0, 0, 0, 0, DayOverflow.Spillover);
                  log("date difference : " + result.toString());
                  // result date difference : 2011-05-01 00:00:00
              }

              /** What day is 3 months and 5 days from today? */
              private void whenIs3Months5DaysFromToday() {
                  DateTime today = DateTime.today(TimeZone.getDefault());
                  DateTime result = today.plus(0, 3, 5, 0, 0, 0,
                          DateTime.DayOverflow.FirstDay);
                  log("3 months and 5 days from today is : "
                          + result.format("YYYY-MM-DD"));
                  // result 3 months and 5 days from today is : 2012-07-17
              }

              /**
               * Current number of hours difference between Paris, France and Perth,
               * Australia.
               
          */
              private void hoursDifferenceBetweenParisAndPerth() {
                  // this assumes the time diff is a whole number of hours; other styles
                  
          // are possible
                  DateTime paris = DateTime.now(TimeZone.getTimeZone("Europe/Paris"));
                  DateTime perth = DateTime.now(TimeZone.getTimeZone("Australia/Perth"));
                  int result = perth.getHour() - paris.getHour();
                  if (result < 0) {
                      result = result + 24;
                  }
                  log("Numbers of hours difference between Paris and Perth : " + result);
                  // result Numbers of hours difference between Paris and Perth : 6
              }

              /** How many weeks is it since Sep 6, 2010? */
              private void weeksSinceStart() {
                  DateTime today = DateTime.today(TimeZone.getDefault());
                  DateTime startOfProject = DateTime.forDateOnly(2010, 9, 6);
                  int result = today.getWeekIndex() - startOfProject.getWeekIndex();
                  log("The number of weeks since Sep 6, 2010 : " + result);
                  // result The number of weeks since Sep 6, 2010 : 83
              }

              /** How much time till midnight? */
              private void timeTillMidnight() {
                  DateTime now = DateTime.now(TimeZone.getDefault());
                  DateTime midnight = now.plusDays(1).getStartOfDay();
                  long result = now.numSecondsFrom(midnight);
                  log("This many seconds till midnight : " + result);
                  // result This many seconds till midnight : 83046
              }

              /** Format using ISO style. */
              private void imitateISOFormat() {
                  DateTime now = DateTime.now(TimeZone.getDefault());
                  log("Output using an ISO format: " + now.format("YYYY-MM-DDThh:mm:ss"));
                  // result Output using an ISO format: 2012-04-12T00:55:54
              }

              private void firstDayOfThisWeek() {
                  DateTime today = DateTime.today(TimeZone.getDefault());
                  DateTime firstDayThisWeek = today; // start value
                  int todaysWeekday = today.getWeekDay();
                  int SUNDAY = 1;
                  if (todaysWeekday > SUNDAY) {
                      int numDaysFromSunday = todaysWeekday - SUNDAY;
                      firstDayThisWeek = today.minusDays(numDaysFromSunday);
                  }
                  log("The first day of this week is : " + firstDayThisWeek);
                  // result The first day of this week is : 2012-04-08
              }

              /** For how many years has the JDK date-time API been suctorial? */
              private void jdkDatesSuctorial() {
                  DateTime today = DateTime.today(TimeZone.getDefault());
                  DateTime jdkFirstPublished = DateTime.forDateOnly(1996, 1, 23);
                  int result = today.getYear() - jdkFirstPublished.getYear();
                  log("The number of years the JDK date-time API has been suctorial : "
                          + result);
                  // result The number of years the JDK date-time API has been suctorial :
                  
          // 16
              }
          }
          posted @ 2012-04-12 01:05 kohri 閱讀(2835) | 評(píng)論 (0)編輯 收藏
          在php中數(shù)組賦值的時(shí)候用array[]這種方法效率會(huì)較高于array_push(),于是乎各種緣由就有了下面的測(cè)試
          測(cè)試代碼:
          <?php
              
          /**
                  *數(shù)組性能測(cè)試
                  *for循環(huán)遍歷測(cè)試函數(shù)有性能影響所以沒(méi)有用,不同時(shí)調(diào)用2個(gè)函數(shù)也是擔(dān)心具有影響,不封裝同時(shí)執(zhí)行代碼是具有影響的
                  *測(cè)試是更改$count參數(shù)(從10~100000 整取遞增)和調(diào)用方法手動(dòng)刷新,記錄時(shí)間為平均大概時(shí)間
              *
          */
              
          $count = 10;
              arrayTest01(
          $count);
              
          function arrayTest01($count) {
                  
          $arr = array ();
                  
          $time = microtime(true);
                  
          for ($i = 0$i < $count$i++) {
                      
          $array[] = $i;
                  }
                  
          echo (microtime(true- $time);
              }
              
          function arrayTest02($count) {
                  
          $arr = array ();
                  
          $time = microtime(true);
                  
          for ($i = 0$i < $count$i++) {
                      
          array_push($arr, $i);
                  }
                  
          echo (microtime(true- $time);
              }
          ?>

          效率大概是array[]快將近一倍,測(cè)試環(huán)境是ubuntu 11 和 windows 7


          windows php-5.2.17/ Apache2.2
          times($count)     10 100 1000 10000         100000       1000000
          array[] 2.31E-05 0.000104 0.000867 0.008417 0.043666 0.288323
          array_push        2.79E-05 0.000181 0.001614 0.014447 0.055875 0.491052
          ubuntu11.04 PHP 5.3.6/apache2.2
          array[] 1.91E-05 7.70E-05 0.000726 0.007669 0.040492 報(bào)錯(cuò)
          array_push        2.50E-05 1.26E-04 0.001149 0.013714 0.056978 報(bào)錯(cuò)

          這是官方網(wǎng)站上的說(shuō)辭
          Note: 如果用 array_push() 來(lái)給數(shù)組增加一個(gè)單元,還不如用 $array[] = ,因?yàn)檫@樣沒(méi)有調(diào)用函數(shù)的額外負(fù)擔(dān)。
          官網(wǎng)鏈接:
          http://cn.php.net/array_push
          posted @ 2012-04-04 18:01 kohri 閱讀(1761) | 評(píng)論 (1)編輯 收藏

          導(dǎo)航

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆分類(lèi)

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 涡阳县| 阜平县| 普兰店市| 股票| 廊坊市| 镇巴县| 宁波市| 铜梁县| 新干县| 临清市| 毕节市| 遵义县| 巴塘县| 米林县| 固安县| 海城市| 安徽省| 宜兰市| 磴口县| 二连浩特市| 福清市| 武川县| 贵德县| 黄大仙区| 拜城县| 湖州市| 长寿区| 隆尧县| 申扎县| 罗源县| 西乌| 肥城市| 简阳市| 鸡泽县| 库伦旗| 石泉县| 庆云县| 永城市| 湘阴县| 雷州市| 榆中县|