主頁 > 後端開發 > python常用標準庫(時間模塊time和datetime)

python常用標準庫(時間模塊time和datetime)

2022-05-28 01:17:09 後端開發

常用的標準庫

time時間模塊

import time

time -- 獲取本地時間戳

時間戳又被稱之為是Unix時間戳,原本是在Unix系統中的計時工具,

它的含義是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒,UNIX時間戳的 0 按照ISO 8601規范為 :1970-01-01T00:00:00Z,

比如:

  • 時間戳 60 表示 1970-01-01T00:01:00Z
  • 時間戳 120 表示 1970-01-01T00:02:00Z
  • 時間戳 3600 表示 1970-01-01T01:00:00Z

小知識:最開始的時候,時間戳的開始年份是1971年,那個時候Unix系統和C語言剛剛誕生,所以時間戳0也就是Unix系統和C語言的生日,那時候的時間位數只有32位,而且每秒中有60個數字,發現只要兩年多的時間時間戳就能完成一個輪回,十分的不方便!所以后來的一系列改革,將時間戳的數值改為每秒1個數字,還有一些新的系統可以將時間戳的位數增大,可以讓時間戳的輪回擴展到一百多年,再后來為了方便人們記憶,將時間戳的起始年份定位1970年整,

import time

stamp_time = time.time()
print(stamp_time)  # 1635768368.2838552
localtime -- 獲取本地時間元組(UTC)

引數為時間戳,默認為本地時間戳,獲取時間元組,

時間元組是python中的一個特殊的資料型別type: time.struct_time,但是它和tuple的特性是相同的,

import time

# 時間元組中的值分別表示:
	# tm_year: 年
	# tm_mon: 月
	# tm_mday: 日
	# tm_hour: 時
	# tm_min: 分
	# tm_sec: 秒
	# tm_wday: 周幾(0表示星期一)
	# tm_yday: 一年中的第幾天(從1開始)
	# tm_isdst: 夏令標識(1夏令時、0非夏令時、-1未知)

# 默認當前時間
time_tuple = time.localtime()
print(time_tuple)
# time.struct_time(tm_year=2021, tm_mon=11, tm_mday=1, tm_hour=20, tm_min=7, tm_sec=50, tm_wday=0, tm_yday=305, tm_isdst=0)

# 指定時間戳
time_tuple = time.localtime(3600)
print(time_tuple)
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=9, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

有大問題啦!!!

時間戳的起始時間是1970-1-1 0:0:0, 這個時候的時間戳是0,那么時間戳3600就是整整一個小時之后,那么時間就應該是1970-1-1 0:1:0 才對的呀!怎么上面的3600確實9點鐘了呢?怎么起始時間變成了8點了呢?

然后你發現你在中國,時間是北京時間,北京在東八區時區,嘶,怎么正好也是個八?

是這樣的,按照道理來說的話全世界任何一個地方的時間戳所代表的時間都應該是一樣的,而且時間戳的起始時間確實是 1970-1-1 0:0:0 ,但是這個時間是位于英國的一個叫做格林威治的小鎮的,格林威治有一個天文臺叫做皇家格林尼治天文臺,后來國際上將這個地方的經線作為本初子午線,作為時間計算時間和地理精度的起點,那么,有時區的存在打破了這個可能,我們在中國,所有的設備都是按照中國的時區編碼的,中國位于東八區,在時間上比英國快八個小時,所以我們中國的本地時間戳就是 1970-1-1 8:00:00,

gmtime -- 獲取時間元組(GMT)

在不知道這個函式的時候,我就很好奇為什么localtime的初始時間比格林威治時間要快8小時,現在就明白了:

函式 描述
gmtime 獲取時間元組(GMT格林威治時間)
localtime 獲取時間元組(UTC協調世界時)
mktime -- 時間元組獲取時間戳

注意:

  1. 引數必須是時間元組time.struct_time 或者元組 tuple 型別;
  2. 元組中的元素一個也不能少,必須九個元素都存在;
  3. 得到的時間戳只收到前六個值的影響,即:年月日時分秒;
  4. 時間元組中的時間表示,最小時間不能低于當地的最小時間戳;
  5. 時間元組中的時間表示,單位可以超出原本的范圍,比如秒滿60進1,我們將秒寫成100,系統也不會報錯,但是時間上會自動的將多出的時間進位,但是數字也不能過大,因為資料型別的大小是有極限的,
  6. mktime回傳的數值是浮點型的,但是精度只能到1;
import time

# 在中國的最小時間單位
tst = (1970, 1, 1, 8, 0, 0, 0, 0, 0)
time_stamp = time.mktime(tst)
print(time_stamp)  # 0.0
ctime -- 獲取時間字串

引數默認為本地時間戳,獲取的資料型別是 str,這個時間字串不像時間元組是一個單獨的資料型別,

import time

# 時間字串中的含義是:
	# Mon Nov  1 21:34:39 2021
    # 星期 月   日 時 分 秒  年

# 默認為本地時間戳
time_char = time.ctime()
print(time_char)  # Mon Nov  1 21:34:39 2021

# 指定時間戳
time_char = time.ctime(0)
print(time_char)  # Thu Jan  1 08:00:00 1970
asctime -- 時間元組獲取時間字串

注意,asctime有弊端,看下例:

import time

tst = (1970, 1, 1, 8, 24, 61, 1, 0, 0)
time_char = time.asctime(tst)
print(time_char)  # Tue Jan  1 08:24:61 1970

tst = (1970, 1, 1, 8, 24, 61, 2, 0, 0)
time_char = time.asctime(tst)
print(time_char)  # Tue Jan  1 08:24:61 1970

看上面的例子,時間元組變成時間字串的時候,會將星期的資料也讀取到,但是卻不會分辨資料是否正確,所以asctime并不常用,

如果要將一個不確定正確性的時間元組變成時間字串的話,先通過 mktime 獲取時間戳(mktime可以分辨出正確的時間資訊),然后在將時間戳通過 ctime 變成時間字串,

strftime -- 格式化時間

格式化時間,按照指定的格式(一段格式化字串,就像字串的格式化一樣)將時間元組變成時間字串,

我們先來學習一下時間占位符的含義是什么:

注意!!!這些占位符的大小寫的含義是不同的:

占位符 含義
%Y 以十進制數字表示以世紀為單位的年份(四位數)
%y 以十進制數字表示年份(兩位數)
%m 以十進制數字表示月份
%D 月/日/年(兩位數)的格式表示年月日
%d 以十進制數字表示日期
%H 以十進制數字表示二十四小時制的時
%M 以十進制數字表示分鐘
%S 以十進制數字表示秒
%z 與UTC的時區偏移
%a 區域設定的縮寫作業日名稱
%A 區域設定的完整作業日名稱
%b 區域設定的縮寫月份名稱
%B 區域設定的完整月份名稱
%c 語言環境的適當日期和時間表示
%I 以十進制數表示十二小時制的時(大寫 ‘愛’)
%p 語言環境的等效值:AM 或者 PM

現在根據使用時間占位符用字串格式化將時間元組變成字串,

import time

# 注意,如果格式化字串中出現中文字符,只能在linux系統下運行,windows下不能決議,直接報錯,

tst = (1970, 1, 1, 8, 0, 0, 0, 0, 0)
time_tuple = time.strftime('%Y-%m-%d-%H-%m-%S',tst)
print(time_tuple)  # 1970-01-01-08-01-00

# 有中文在windows下報錯
tst = (1970, 1, 1, 8, 0, 0, 0, 0, 0)
time_tuple = time.strftime('%Y-%m哈哈-%d-%H-%m-%S',tst)
print(time_tuple)  # 1970-01-01-08-01-00
strptime -- 格式化時間

格式化時間,通過格式化字串將一個字串中的時間變成時間元組,

import time

# 格式化字串要和原字串一模一樣,只是將需要提出的部分使用占位符替換
char = '2000年10月30日一個偉大的中國少年在三晉大地誕生了'
format_char = '%Y年%m月%d日一個偉大的中國少年在三晉大地誕生了'

tst = time.strptime(char, format_char)
print(tst)
sleep -- 時間睡眠

等待指定秒數的時間:

import time

print('開始睡覺')
time.sleep(2)
print('睡了兩秒鐘,神清氣爽')
perf_counter -- 時間計時

用于計算程式運行的時間

import time

# perf_counter 用于計算程式運行的時間

# 記錄開始時間
start_time = time.perf_counter()

# 程式運行
for i in range(10000):
    pass

# 記錄時間
end_time = time.perf_counter()

# windows系統直接拿到第二次的值就可以了,不用減去第一次的值也行
print(end_time, '秒')  # 0.0003918 秒
print(end_time - start_time, '秒')  # 0.0003916 秒

如果使用多次perf_counter()函式,直接輸出其的值是距第一次使用的時間長度:

import time

time1 = time.perf_counter()
time.sleep(1)
time2 = time.perf_counter()
print(time2)

time.sleep(2)
time3 = time.perf_counter()
print(time3)

time.sleep(3)
time4 = time.perf_counter()
print(time4)

"""
結果:
1.0002558
3.0048941
6.019172
"""

注意:windows系統下使用perf_counter()函式可以直接輸出耗時長度,每次的耗時默認都是距離第一次使用perf_counter()函式的時間長度;如果在linux系統下使用perf_counter()函式則必須要使用第二次的結果減去之前的結果,因為在linux系統中perf_counter()函式的值和time()函式的值都是一樣的,那就是回傳一個時間戳,

使用time.time()計算時間

import time

# perf_counter 用于計算程式運行的時間

# 記錄開始時間
start_time = time.time()

# 程式運行
for i in range(10000):
    pass

# 記錄時間
end_time = time.time()

print(end_time - start_time, '秒')  # 0.001001119613647461 秒

耗時短的計時推薦使用pref_counter,耗時長的推薦使用time

模擬進度條
# 1、定義進度條樣式
print('[%-50s]' % ('###########'))
print('[%-50s]' % ('###################'))
print('[%-50s]' % ('###########################'))
print('[%-50s]' % ('####################################'))
print('[%-50s]' % ('########################################'))
# 2、讓進度條動起來
import time

progress_char = ''
for i in range(50):
    progress_char += '#'
    time.sleep(0.05)  # 延時看起來不是很快
    # end使不能換行,\r使進度條不斷重繪,保持在同一行顯示;
    print('\r[%-50s]' % (progress_char), end='')
print('\n')
# 3、根據檔案的大小調整進度條的進度
import time

def progress(percent):
    """控制進度條的顯示
    引數是下載的百分比,用來控制進度條的進展
    """
    # 如果百分比超過了1,說明資料已經接受完畢
    if percent > 1:
        percent = 1

    # 列印對應的進度條效果
    char = '#' * int(percent * 50)
    print('\r[%-50s]%d%%' % (char, int(percent * 100)), end='')


# 已下的大小
rec_size = 0

# 下載檔案的大小
total_size = 102400

# 模擬下載程序
while rec_size < total_size:
    rec_size += 10240  # 下載速度
    time.sleep(0.05)  # 模擬網路延遲
    percent = rec_size / total_size  # 計算下載的進度(百分比)
    # 呼叫進度條
    progress(percent)
程式計時

在學習了perf_counter計時后,我們知道有很多種方法可以用于計時:

  1. time函式:回傳當前時間戳,使用time函式計時是獲取兩個節點各自的時間戳,然后計算其之間的差值,即為耗時時長,
    • 優點:計算的是真實世界中的時間長度,而且計時本身不消耗計算機資源,計算長時間的程式優勢較大;
    • 缺點:time函式的時間獲取來源于計算機本身的時間,如果在計時途中計算機的時間發生變化,比如人為的調快一小時,那么計時就會比正確的時間慢一個小時的時間,
  2. perf_counter函式:是time模塊中專門用于性能計時的函式,具有高解析度的時鐘,已測量短持續的時間,
    • 優點:是專門用于性能計時的函式,精確度高,適合計算耗時短的程式;
    • 缺點:專門用于計時的函式,計時本身就會消耗計算機資源,所以計時過長難免會有一定的影響;
  3. process_time函式:用于評測處理時間,計算內核和用戶空間CPU時間之和,這個時間不包含程式阻塞的時間,比如time.sleep()、input()等,
    • 優點:專門用于計算程式本身內在的時間消耗,排除外來因素、提升系統本身效率、優化程式使用;
import time


def loop():
    time.sleep(1)
    input('請輸入:')  # 這個位置人為數三秒回車執行
    num = 10 ** 8
    for _ in range(num):
        pass
    time.sleep(1)


# time.time
start_time = time.time()
loop()
end_time = time.time()
print(start_time)  # 1640270620.4077902
print(end_time)  # 1640270628.1165576
print(end_time - start_time)  # 7.708767414093018

# time.perf_counter
start_time = time.perf_counter()
loop()
end_time = time.perf_counter()
print(start_time)  # 3e-07
print(end_time)  # 7.823952
print(end_time - start_time)  # 7.8239517

# time.process_time
start_time = time.process_time()
loop()
end_time = time.process_time()
print(start_time)  # 3.234375
print(end_time)  # 4.8125
print(end_time - start_time)  # 1.578125

除此之外,python3.7之后,新增了精確到納秒的函式:

  1. time.time_ns()
  2. time.perf_counter_ns()
  3. time.process_time_ns()

還有標準庫timeit用于程式的性能計時,

時間轉換示意圖

在上述的幾種型別中存在時間轉換的問題,詳情和之間的關系可以參考下圖:

在這里插入圖片描述

datetime時間模塊

import datatime

datatime模塊重新封裝了time模塊,提供更多的介面,

date類

date類專門用于描述日期,實體化物件時必須填入引數,分別表示:年、月、日,回傳datetime.date物件,

datetime.date(year, month, day)

from datetime import date

date_o = date(2022, 3, 1)

print(date_o)
print(type(date_o))

"""
結果:
2022-03-01
<class 'datetime.date'>
"""

常用屬性

屬性 作用
year date物件表示的具體年份(實體化物件呼叫達到效果);
month date物件表示的具體月份(實體化物件呼叫達到效果);
day date物件表示的具體日(實體化物件呼叫達到效果);
max date類能夠表示的最大日期;
min date類能夠表示的最小日期;
resolution date類能夠表示的最小單位;

常用方法

注意,以下方法如果可以回傳新的物件,使用物件呼叫時,回傳新的物件,原物件不變;如果根據物件值回傳對應的值,則使用類呼叫達不到目標效果;

方法 作用
today() 回傳本地日期物件;
fromtimestamp(time_stamp) 給定時間戳回傳日期物件;
replace(y, m, d) 給定年月榷訓傳日期物件;
timetuple() 回傳本地當前時間元組time.struct_time物件;
weekday() 回傳星期序號,星期一回傳0;
isoweekday() 回傳星期序號,星期一回傳1;
isocalendar() 回傳元組,表示日期的年份、第幾周、第幾周之后的第幾天;
isoformat() 回傳時間字串;
strftime() 格式化日期,參考time.strftime()

time類

time類是datetime模塊中專門用于描述時間的類,四個引數:hourminutesecondmicrosecond默認都為0,

datetime.time(hour=0, minute=0, second=0, microsecond=0)

from datetime import time

time_0 = time()

print(time_0)
print(type(time_0))

"""
結果:
00:00:00
<class 'datetime.time'>
"""

time的屬性和date類的屬性方法基本相同,可以參考使用;

datetime類

相同于datetime兩個類的結合,使用基本相同;

timedelta類

timedelta類用于時間運算,類的引數有datetime模塊支持的所有時間單位,使用其它的時間和日期物件可以和timedelta物件進行時間加減運算,注意在實體化時使用關鍵字傳參;

from datetime import datetime
from datetime import timedelta

# 日期物件
datetime_o = datetime(2000, 10, 30, 14, 40, 6)
print(datetime_o)

# ## 假設我們要計算這個時間5天4小時23分6秒之后的時間

# 實體化 5天4小時23分6秒 的timedelta物件
timedelta_o = timedelta(days=5, hours=4, minutes=23, seconds=6)

# 將時間物件和timedelta物件相加
datetime_o += timedelta_o
print(datetime_o)

"""
結果:
2000-10-30 14:40:06
2000-11-04 19:03:12
"""

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

標籤:Python

上一篇:Conda 創建 Python 虛擬環境不純凈的問題(2021.1.18)

下一篇:JSPServletMYSQL查詢不執行

標籤雲
其他(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)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more