主頁 >  其他 > ??高級JAVA開發必備技能??java8 新日期時間API((四)JSR-310:常用計算工具),2萬字詳解(JAVA 小虛竹,建議收藏)

??高級JAVA開發必備技能??java8 新日期時間API((四)JSR-310:常用計算工具),2萬字詳解(JAVA 小虛竹,建議收藏)

2021-09-13 08:51:19 其他

??作者簡介:Java領域優質創作者🏆,博客專家認證🏆
??技識訓,該賞
??點贊 👍 收藏 ?再看,養成習慣

大家好,我是小虛竹,之前有粉絲私聊我,問能不能把JAVA8 新的日期時間API(JSR-310)知識點梳理出來,答案是肯定的,誰讓我寵粉呢,由于內容偏多(超十萬字了),會拆成多篇來寫,

閑話就聊到這,請看下面的正文,

文章目錄

  • 常用于計算的類介紹
  • Duration
    • Duration類說明
    • Duration常用的用法
      • 創建Duration物件
      • 訪問Duration的時間
      • Duration計算
  • Period
    • Period類說明
    • Period常用的用法
      • 創建Period物件
      • 訪問Period的時間
      • Duration計算
  • TemporalUnit
    • TemporalUnit類說明
    • ChronoUnit常用的用法
  • TemporalField
    • TemporalField類說明
    • ChronoField常用的用法
  • ValueRange
    • ValueRange類說明
    • ValueRange常用的用法
  • Chronology 判斷是否閏年
    • 實戰
  • 比較日期時間的先后
    • 比較-LocalDate
    • 比較-LocalTime
    • 比較-OffsetDateTime
    • 比較-OffsetTime
    • 比較-ZonedDateTime
  • 計算日期時間的間隔
  • 推薦相關文章
    • hutool日期時間系列文章
    • 其他

常用于計算的類介紹

介紹下java8 中提供了幾個常用于計算的類:

  • Duration:表示秒和納秒的時間量
  • Period:表示年月日的時間量
  • TemporalUnit:日期時間的基本單位
  • TemporalField:日期時間的屬性
  • ValueRange:表示取值范圍

Duration

Duration類說明

包路徑:java.time.Duration

public final class Duration
        implements TemporalAmount, Comparable<Duration>, Serializable {
    private final long seconds;
   
    private final int nanos;
        ...
        }

DurationTemporalAmount 的實作類,類里包含兩個變數secondsnanos ,所以Duration 是由秒和納秒組成的時間量,

一個Duration實體是不可變的,當創建出物件后就不能改變它的值了,

Duration常用的用法

創建Duration物件

Duration 適合處理較短的時間,需要更高的精確性,我們能使用between()方法比較兩個瞬間的差:

		Instant first = Instant.now();
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		Instant second = Instant.now();
		Duration duration = Duration.between(first, second);
		System.out.println(duration);

image-20210830213020151

可以通過LocalDateTime 類獲取獲取Duration物件

		LocalDateTime first = LocalDateTime.of(2021, 8, 30, 23, 14, 20);

		LocalDateTime second = LocalDateTime.of(2021, 8, 30, 23, 13, 0);

		Duration duration = Duration.between(first, second);
		System.out.println(duration);

image-20210830221908291

訪問Duration的時間

Duration 物件中可以獲取秒和納秒屬性,但沒有毫秒屬性,跟System.getCurrentTimeMillis()不同,

	Instant first = Instant.now();
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		Instant second = Instant.now();
		Duration duration = Duration.between(first, second);
		System.out.println(duration);
		System.out.println("秒:"+duration.getSeconds());
		System.out.println("納秒:"+duration.getNano());

image-20210830213704477

可以轉換整個時間成其他單位,如納秒,毫秒,分鐘,小時,天

		Instant first = Instant.now();
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		Instant second = Instant.now();
		Duration duration = Duration.between(first, second);
		System.out.println(duration);
		System.out.println("秒:"+duration.getSeconds());
		System.out.println("納秒:"+duration.getNano());
		System.out.println("納秒:"+duration.toNanos());
		System.out.println("毫秒:"+duration.toMillis());
		System.out.println("分:"+duration.toMinutes());
		System.out.println("小時:"+duration.toHours());
		System.out.println("天:"+duration.toDays());

image-20210830220300588

由圖上可知,getNano 方法和toNanos 方法不太一樣,前者是獲取這段時間的小于1s的部分,后者是整個時間轉化為納秒,

Duration計算

plusNanos()
plusMillis()
plusSeconds()
plusMinutes()
plusHours()
plusDays()
minusNanos()
minusMillis()
minusSeconds()
minusMinutes()
minusHours()
minusDays()

plusSecondsminusSeconds 為例:

LocalDateTime first = LocalDateTime.of(2021, 8, 30, 23, 14, 20);
		LocalDateTime second = LocalDateTime.of(2021, 8, 30, 23, 13, 0);
		Duration duration = Duration.between(first, second);
		System.out.println(duration);

		Duration duration1 = duration.plusSeconds(10);
		System.out.println("plusSeconds 后:"+duration);
		System.out.println("plusSeconds 后新的Duration物件:"+duration1);

		Duration duration2 = duration.minusSeconds(10);
		System.out.println("minusSeconds 后:"+duration);
		System.out.println("minusSeconds 后新的Duration物件:"+duration2);

image-20210830222707761

由上面的驗證可知,這些計算方法執行后,會回傳一個新的Duration物件,原先的Duration物件不變,

Period

Period類說明

包路徑:java.time.Period

public final class Period
        implements ChronoPeriod, Serializable {
            /**
     * The number of years.
     */
    private final int years;
    /**
     * The number of months.
     */
    private final int months;
    /**
     * The number of days.
     */
    private final int days;
        ...
        }

PeriodChronoPeriod 的實作類,類里包含兩個變數years ,monthsdays ,所以Period 是由年,月和日組成的時間量,

Period常用的用法

創建Period物件

		LocalDate first = LocalDate.of(2021, 8, 29);
		LocalDate second = LocalDate.of(2022, 9, 30);
		Period period = Period.between(first, second);
		System.out.println(period);

image-20210830224610563

訪問Period的時間

		LocalDate first = LocalDate.of(2021, 8, 28);
		LocalDate second = LocalDate.of(2022, 10, 31);
		Period period = Period.between(first, second);
		System.out.println(period);
		System.out.println("年:"+period.getYears());
		System.out.println("月:"+period.getMonths());
		System.out.println("日:"+period.getDays());

image-20210830225619062

可以轉換整個時間成其他單位,月

LocalDate first = LocalDate.of(2021, 8, 29);		
LocalDate second = LocalDate.of(2022, 9, 30);		
Period period = Period.between(first, second);	
	System.out.println(period);	
	System.out.println("月:"+period.toTotalMonths());

image-20210830225328558

由圖上可知,getMonths 方法和toTotalMonths 方法不太一樣,前者是獲取這段時間的月的部分,后者是整個時間轉化為以月為單位長度,

toTotalMonths 原始碼:

public long toTotalMonths() {        
return years * 12L + months;  // no overflow    
}

Duration計算

plusDays()
plusMonths()
plusYears()

minusDays()
minusMonths()
minusYears()

plusMonthsminusMonths 為例:

		LocalDate first = LocalDate.of(2021, 8, 28);
		LocalDate second = LocalDate.of(2022, 10, 31);
		Period period = Period.between(first, second);
		System.out.println(period);
		Period period1 = period.plusMonths(1);
		System.out.println("plusMonths 后:"+period);
		System.out.println("plusMonths 后新的Period物件:"+period1);

		Period period2 = period.minusMonths(1);
		System.out.println("minusMonths 后:"+period);
		System.out.println("minusMonths 后新的Period物件:"+period2);

image-20210830230345446

由上面的驗證可知,這些計算方法執行后,會回傳一個新的Period物件,原先的Period物件不變,

TemporalUnit

TemporalUnit類說明

包路徑:java.time.temporal.TemporalUnit

public interface TemporalUnit {
...
}

public enum ChronoUnit implements TemporalUnit {    
private final String name;   
 private final Duration duration; 
   ...
   }

TemporalUnit 主要實作類是列舉型別ChronoUnit

一個ChronoUnit成員會維護一個字串名字屬性name和一個Duration型別的實體,

其中ChronoUnit列舉了標準的日期時間單位集合,就是常用的年、月、日、小時、分鐘、秒、毫秒、微秒、納秒,這些時間單位的時間量到底是多少,代表多長的時間,在該列舉類中都有定義,

public enum ChronoUnit implements TemporalUnit {
 
    NANOS("Nanos", Duration.ofNanos(1)),
    MICROS("Micros", Duration.ofNanos(1000)),
    MILLIS("Millis", Duration.ofNanos(1000_000)),
    SECONDS("Seconds", Duration.ofSeconds(1)),
    MINUTES("Minutes", Duration.ofSeconds(60)),
    HOURS("Hours", Duration.ofSeconds(3600)),
    HALF_DAYS("HalfDays", Duration.ofSeconds(43200)),
    DAYS("Days", Duration.ofSeconds(86400)),
    WEEKS("Weeks", Duration.ofSeconds(7 * 86400L)),
    MONTHS("Months", Duration.ofSeconds(31556952L / 12)),
    YEARS("Years", Duration.ofSeconds(31556952L)),
    DECADES("Decades", Duration.ofSeconds(31556952L * 10L)),
    CENTURIES("Centuries", Duration.ofSeconds(31556952L * 100L)),
    MILLENNIA("Millennia", Duration.ofSeconds(31556952L * 1000L)),
    ERAS("Eras", Duration.ofSeconds(31556952L * 1000_000_000L)),
    FOREVER("Forever", Duration.ofSeconds(Long.MAX_VALUE, 999_999_999));     
 
    private final String name;
    private final Duration duration;
 
    private ChronoUnit(String name, Duration estimatedDuration) {
        this.name = name;
        this.duration = estimatedDuration;
    }
    ···
}

ChronoUnit常用的用法

		LocalDateTime localDateTime = LocalDateTime.of(2021, 8, 30, 23, 14, 20);
		LocalDateTime offset = localDateTime.plus(1, ChronoUnit.DAYS);
		// 非同一物件
		Assert.assertNotSame(localDateTime, offset);
		System.out.println(offset);

image-20210831233938785

TemporalField

TemporalField類說明

包路徑:java.time.temporal.TemporalField

public interface TemporalField {
    ...
}

public enum ChronoField implements TemporalField {
     private final String name;
    private final TemporalUnit baseUnit;
    private final TemporalUnit rangeUnit;
    private final ValueRange range;
    ...
}

TemporalField 主要實作類是列舉型別ChronoField

一個ChronoField成員會維護一個字串名字屬性name、一個TemporalUnit的基礎單位baseUnit、一個TemporalUnit的表示范圍的單位rangeUnit和一個ValueRange型別的range用于表示當前屬性的范圍,

public enum ChronoField implements TemporalField {
    //一秒鐘的納秒數
    NANO_OF_SECOND("NanoOfSecond", NANOS, SECONDS, ValueRange.of(0, 999_999_999))
    //一分鐘的秒數
    SECOND_OF_MINUTE("SecondOfMinute", SECONDS, MINUTES, ValueRange.of(0, 59), "second")
    //一個小時的分鐘數
    MINUTE_OF_HOUR("MinuteOfHour", MINUTES, HOURS, ValueRange.of(0, 59), "minute")
    //一上午或者一下午有多少個小時
    CLOCK_HOUR_OF_AMPM("ClockHourOfAmPm", HOURS, HALF_DAYS, ValueRange.of(1, 12))
    //一天的小時數
    CLOCK_HOUR_OF_DAY("ClockHourOfDay", HOURS, DAYS, ValueRange.of(1, 24))
    //上午還是下午
    AMPM_OF_DAY("AmPmOfDay", HALF_DAYS, DAYS, ValueRange.of(0, 1), "dayperiod")
    //一周的第幾天
    DAY_OF_WEEK("DayOfWeek", DAYS, WEEKS, ValueRange.of(1, 7), "weekday")
    //當前月的天數
    DAY_OF_MONTH("DayOfMonth", DAYS, MONTHS, ValueRange.of(1, 28, 31), "day")
    //當前年的天數
    DAY_OF_YEAR("DayOfYear", DAYS, YEARS, ValueRange.of(1, 365, 366))
    //當前月的周數
    ALIGNED_WEEK_OF_MONTH("AlignedWeekOfMonth", WEEKS, MONTHS, ValueRange.of(1, 4, 5))
    //當前年的周數
    ALIGNED_WEEK_OF_YEAR("AlignedWeekOfYear", WEEKS, YEARS, ValueRange.of(1, 53))
    //以每月的第一天為星期一,然后計算當天是一周的第幾天
    ALIGNED_DAY_OF_WEEK_IN_MONTH("AlignedDayOfWeekInMonth", DAYS, WEEKS, ValueRange.of(1, 7))
    //以每月的第一天為星期一,然后計算當天是一周的第幾天
    ALIGNED_DAY_OF_WEEK_IN_YEAR("AlignedDayOfWeekInYear", DAYS, WEEKS, ValueRange.of(1, 7))
    //當前年的月數
    MONTH_OF_YEAR("MonthOfYear", MONTHS, YEARS, ValueRange.of(1, 12), "month")
    
    private final TemporalUnit baseUnit;
    private final String name;
    private final TemporalUnit rangeUnit;
    private final ValueRange range;
    private final String displayNameKey;
...
}

ChronoField常用的用法

ALIGNED_WEEK_OF_MONTH 和 ALIGNED_DAY_OF_WEEK_IN_MONTH 使用示例

		//每七天一周,2021-08-31 是周二,對應的值是3
		int num = LocalDate.of(2021, 8, 31).get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH);
		System.out.println(num);
		//這個月的第5周 2021-08-31
		num = LocalDate.of(2021, 8, 31).get(ChronoField.ALIGNED_WEEK_OF_MONTH);
		System.out.println(num);

image-20210831233408038

ValueRange

ValueRange類說明

ValueRange 表示取值范圍,

public final class ValueRange implements Serializable {

    /**
     * The smallest minimum value.最小值
     */
    private final long minSmallest;
    /**
     * The largest minimum value.最大可能最小值
     */
    private final long minLargest;
    /**
     * The smallest maximum value.最小可能最大值
     */
    private final long maxSmallest;
    /**
     * The largest maximum value.最大值
     */
    private final long maxLargest;
...
}

ValueRange常用的用法

ValueRange valueRange = ValueRange.of(1L, 10000L);
		System.out.println(valueRange);
		valueRange = ValueRange.of(1L, 5L, 10000L, 50000L);
		System.out.println(valueRange);

image-20210831234618197

		LocalDateTime localDateTime = LocalDateTime.of(2021, 8, 30, 23, 14, 20);
		ValueRange valueRange = localDateTime.range(ChronoField.DAY_OF_MONTH);
		System.out.println(valueRange.getMinimum());
		System.out.println(valueRange.getMaximum());
		System.out.println(valueRange.getLargestMinimum());
		System.out.println(valueRange.getSmallestMaximum());

image-202109019254578

Chronology 判斷是否閏年

判斷是否閏年是由年表Chronology 提供的,通常情況下,我們使用ISO下的年表,是IsoChronology

看下代碼實作

 @Override
    public boolean isLeapYear(long prolepticYear) {
        return ((prolepticYear & 3) == 0) && ((prolepticYear % 100) != 0 || (prolepticYear % 400) == 0);
    }

好精煉的代碼,值得我們研究研究

閏年的基本判定方法:
1、非整百年:能被4整除的為閏年,(如2004年就是閏年,2001年不是閏年)
2、整百年:能被400整除的是閏年,(如2000年是閏年,1900年不是閏年)

((prolepticYear & 3) == 0) && ((prolepticYear % 100) != 0 || (prolepticYear % 400) == 0);

這段代碼用了兩個條件,這兩個條件都符合,才是閏年,

  • (prolepticYear & 3) == 0
  • (prolepticYear % 100) != 0 || (prolepticYear % 400) == 0

(prolepticYear & 3) == 0 用了與運算子“&”,其使用規律如下:
兩個運算元中位都為1,結果才為1,否則結果為0,

3 的二進制是011prolepticYear & 3 目的是保留最后2位二進制數,然后判斷是否最后兩位二進制數等于0,如果等于0,證明能被4整除,閏年一定要滿足是4的倍數的條件;

(prolepticYear % 100) != 0 || (prolepticYear % 400) == 0 這個就比較好理解了,看是不是100的倍數或者是不是400 倍數,

而且小虛竹發現java.time.Year#isLeap() 用的實作代碼邏輯是一樣的

public static boolean isLeap(long year) {
    return ((year & 3) == 0) && ((year % 100) != 0 || (year % 400) == 0);
}

即使是巨佬寫的代碼,也存在代碼的復用性問題

上面IsoChronology 是對Chronology介面介面的isLeapYear實作,MinguoChronology等實作類的isLeapYear,互用了IsoChronology的isLeapYear方法,

//MinguoChronology 
public boolean isLeapYear(long prolepticYear) {
        return IsoChronology.INSTANCE.isLeapYear(prolepticYear + YEARS_DIFFERENCE);
    }

巨佬是有考慮復用的,在MinguoChronology等實作類已經有復用了,

java.time.Year#isLeap() 的優先級高,因為它是靜態方法,isoChronology ** 可以引Year.isLeap**
Year ** 不可以引Chronology.isLeapYear** ,

博主發現在IsoChronology ** 的resolveYMD** 中已經存在了對Year.isLeap 的參考,

image-202109089047374

有的工具類會為了減少外部類依賴,重新寫一次底層方法,避免外部類(或是不在一個包底下)的類依賴,這個已經用了,說不過去 ,所以代碼是存在復用性問題的,

實戰

		int year = 2020;
		System.out.println(Year.isLeap(year));
		System.out.println(IsoChronology.INSTANCE.isLeapYear(year));

		LocalDate localDate = LocalDate.of(2021,9,7);
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println(localDate.isLeapYear());
		System.out.println(localDateTime.toLocalDate().isLeapYear());

image-2021090733986

比較日期時間的先后

基本上都有這四個比較方法::compareTo()、isBefore()、isAfter()、和equals()

比較-LocalDate

		LocalDate localDate1 = LocalDate.of(2021, 8, 14);
		// 比較指定日期和引數日期,回傳正數,那么指定日期時間較晚(數字較大):13
		int i = localDate1.compareTo(LocalDate.of(2021, 8, 1));
		System.out.println(i);
		// 比較指定日期是否比引數日期早(true為早):true
		System.out.println(localDate1.isBefore(LocalDate.of(2021,8,31)));
		// 比較指定日期是否比引數日期晚(true為晚):false
		System.out.println(localDate1.isAfter(LocalDate.of(2021,8,31)));
		// 比較兩個日期是否相等:true
		System.out.println(localDate1.isEqual(LocalDate.of(2021, 8, 14)));

image-202108149597

比較-LocalTime

		LocalTime localTime1 = LocalTime.of(23, 26, 30);
		LocalTime localTime2 = LocalTime.of(23, 26, 32);
		// 兩個時間進行比較 大回傳1,小就回傳-1,一樣就回傳0:-1
		System.out.println(localTime1.compareTo(localTime2));

		// 比較指定時間是否比引數時間早(true為早):true
		System.out.println(localTime1.isBefore(localTime2));
		// 比較指定時間是否比引數時間晚(true為晚):false
		System.out.println(localTime1.isAfter(localTime2));
		// 比較兩個時間是否相等:true
		System.out.println(localTime1.equals(LocalTime.of(23, 26, 30)));

image-2021081498214

比較-OffsetDateTime

		LocalDateTime localDateTime1 = LocalDateTime.of(2021, 8, 15, 13, 14, 20);
		OffsetDateTime offsetDateTime1 = OffsetDateTime.of(localDateTime1, ZoneOffset.ofHours(8));
		OffsetDateTime offsetDateTime3 = OffsetDateTime.of(localDateTime1, ZoneOffset.ofHours(8));

		LocalDateTime localDateTime2 = LocalDateTime.of(2021, 8, 15, 13, 14, 30);
		OffsetDateTime offsetDateTime2 = OffsetDateTime.of(localDateTime2, ZoneOffset.ofHours(8));

		// 兩個時間進行比較 大回傳1,小就回傳-1,一樣就回傳0:-1
		System.out.println(offsetDateTime1.compareTo(offsetDateTime2));

		// 比較指定時間是否比引數時間早(true為早):true
		System.out.println(offsetDateTime1.isBefore(offsetDateTime2));
		// 比較指定時間是否比引數時間晚(true為晚):false
		System.out.println(offsetDateTime1.isAfter(offsetDateTime2));
		// 比較兩個時間是否相等:true
		System.out.println(offsetDateTime1.equals(offsetDateTime3));

image-20210821944542

比較-OffsetTime

		LocalTime localTime1 = LocalTime.of( 13, 14, 20);
		OffsetTime offsetTime1 = OffsetTime.of(localTime1, ZoneOffset.ofHours(8));
		OffsetTime offsetTime3 = OffsetTime.of(localTime1, ZoneOffset.ofHours(8));

		LocalTime localTime2 = LocalTime.of(13, 14, 30);
		OffsetTime offsetTime2 = OffsetTime.of(localTime2, ZoneOffset.ofHours(8));
		// 兩個時間進行比較 大回傳1,小就回傳-1,一樣就回傳0:-1
		System.out.println(offsetTime1.compareTo(offsetTime2));

		// 比較指定時間是否比引數時間早(true為早):true
		System.out.println(offsetTime1.isBefore(offsetTime2));
		// 比較指定時間是否比引數時間晚(true為晚):false
		System.out.println(offsetTime1.isAfter(offsetTime2));
		// 比較兩個時間是否相等:true
		System.out.println(offsetTime1.equals(offsetTime3));

image-2021089109890

比較-ZonedDateTime

		LocalDateTime localDateTime1 = LocalDateTime.of(2021, 8, 15, 13, 14, 20);
		ZonedDateTime zonedDateTime1 = ZonedDateTime.of(localDateTime1, ZoneOffset.ofHours(8));

		ZonedDateTime zonedDateTime3 = ZonedDateTime.of(localDateTime1, ZoneOffset.ofHours(8));

		LocalDateTime localDateTime2 = LocalDateTime.of(2021, 8, 15, 13, 14, 30);
		ZonedDateTime zonedDateTime2 = ZonedDateTime.of(localDateTime2, ZoneOffset.ofHours(8));

		// 兩個時間進行比較 大回傳1,小就回傳-1,一樣就回傳0:-1
		System.out.println(zonedDateTime1.compareTo(zonedDateTime2));

		// 比較指定時間是否比引數時間早(true為早):true
		System.out.println(zonedDateTime1.isBefore(zonedDateTime2));
		// 比較指定時間是否比引數時間晚(true為晚):false
		System.out.println(zonedDateTime1.isAfter(zonedDateTime2));
		// 比較兩個時間是否相等:true
		System.out.println(zonedDateTime1.equals(zonedDateTime3));

image-20210821907094

計算日期時間的間隔

Duration 和**Period ** 都有 **between ** 方法

這個就不在重復說了,上面DurationPeriod 的常用用法里有介紹到,

推薦相關文章

hutool日期時間系列文章

1DateUtil(時間工具類)-當前時間和當前時間戳

2DateUtil(時間工具類)-常用的時間型別Date,DateTime,Calendar和TemporalAccessor(LocalDateTime)轉換

3DateUtil(時間工具類)-獲取日期的各種內容

4DateUtil(時間工具類)-格式化時間

5DateUtil(時間工具類)-決議被格式化的時間

6DateUtil(時間工具類)-時間偏移量獲取

7DateUtil(時間工具類)-日期計算

8ChineseDate(農歷日期工具類)

9LocalDateTimeUtil(JDK8+中的{@link LocalDateTime} 工具類封裝)

10TemporalAccessorUtil{@link TemporalAccessor} 工具類封裝

其他

要探索JDK的核心底層原始碼,那必須掌握native用法

萬字博文教你搞懂java原始碼的日期和時間相關用法

java的SimpleDateFormat執行緒不安全出問題了,虛竹教你多種解決方案

原始碼分析:JDK獲取默認時區的風險和最佳實踐

高級JAVA開發必備技能:時區的規則發生變化時,如何同步JDK的時區規則

今天是持續寫作的第 9 / 100 天,
可以關注我,點贊我、評論我、收藏我啦,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299658.html

標籤:其他

上一篇:Charles抓包工具實戰教程

下一篇:關于linux新手快速入門的幾個重要概念及指令

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more