現在完成式 have + 過去分詞:到底在講哪個時間?一句話分清楚
很多人第一次看到 I have lived here for three years.(我在這裡住了三年了。)都會卡住:have 不是「有」嗎?怎麼後面接了一個動詞?而且它講的到底是過去還是現在?
會卡住很正常,因為中文沒有跟**現在完成式(present perfect)**完全對應的講法。它的結構是 have / has + 過去分詞(past participle),而它真正想表達的,是一件很特別的事:過去發生的動作,跟現在有關聯。 這篇就用一個簡單的問句,帶你把它跟過去簡單式徹底分清楚。
核心概念:一隻腳踩在過去,一隻腳踩在現在
現在完成式最特別的地方,是它同時牽著兩個時間。動作確實發生在過去,但說話的人在意的是它對現在造成的結果或影響。
想像一條時間線:左邊是過去,最右邊是「現在」這個點。過去簡單式講的事,整件落在左邊,講完就跟現在斷開了;現在完成式講的事,從過去一路連到現在這個點上,還在發生作用。
- I have lived here for three years.(我在這裡住了三年了。)→ 過去搬來,到現在還住著
- She has finished her homework.(她寫完功課了。)→ 過去寫完,結果是現在功課已經完成
抓住這個畫面,後面的用法就都有了方向。
用法一:人生經驗,「曾經做過」
現在完成式很常拿來講一輩子到目前為止的經驗,重點在「有沒有這個經驗」,不在「什麼時候」。
- I have been to Japan.(我去過日本。)
- Have you ever eaten durian?(你吃過榴槤嗎?)
- He has never seen snow.(他從來沒看過雪。)
這裡常出現 ever(曾經)和 never(從來沒有)。注意 have been to 是「去過某地(已經回來了)」這個固定講法,很好用。
用法二:過去的動作,影響到現在
第二個用法是講一件過去發生的事,而它的結果到現在還在。
- I've lost my keys.(我鑰匙弄丟了。)→ 言下之意:現在還沒找到
- She has broken her arm.(她手臂骨折了。)→ 言下之意:現在手還包著
- They have moved to a new house.(他們搬到新家了。)→ 言下之意:現在住在新家
對照一下你就懂這個「言下之意」有多重要:說 I've lost my keys. 是「我現在進不了門」;如果改用過去式說 I lost my keys yesterday, but I found them.(我昨天弄丟鑰匙,但找到了。),那就只是在講一段過去的小插曲,跟現在無關了。
訊號詞:句子裡的時間線索
句子裡常藏著訊號詞,看到它們就知道該往現在完成式想。
for 和 since:講「持續多久」和「從何時起」
- for + 一段時間:I have studied English for five years.(我學英文學了五年了。)
- since + 一個起點:I have studied English since 2020.(我從 2020 年就開始學英文了。)
訣竅:for 後面接「多長」(two days、a week),since 後面接「從哪個點開始」(Monday、last year、2020)。
already / yet / just:講事情的進度
- already(已經):I have already eaten.(我已經吃過了。)
- yet(還,用在否定與疑問句):Have you finished yet?(你做完了沒?)/ I haven't finished yet.(我還沒做完。)
- just(剛剛):She has just arrived.(她剛到。)
關鍵對比:跟過去簡單式差在哪?
這是整篇最重要的一段。現在完成式和**過去簡單式(past simple)**最大的差別在於:
- 過去簡單式:講一個明確的過去時間點,而且這件事跟現在無關,就是過去的一段紀錄。
- 現在完成式:不講明確的時間點,重點是它影響到現在。
看同一個動作怎麼換時態:
- I lost my keys yesterday.(我昨天弄丟鑰匙。)→ 有 yesterday,講過去那一刻,用過去式
- I have lost my keys.(我把鑰匙弄丟了。)→ 沒講時間,重點是現在還沒找到,用完成式
判斷訣竅(帶得走的):先問自己——句子裡有沒有 yesterday、last week、in 2020、two days ago 這種明確的過去時間?
- 有 → 用過去簡單式
- 沒有,而且這件事影響到現在 → 用現在完成式
因為現在完成式一隻腳還踩在「現在」,它不能跟一個鎖死在過去的時間點同時出現。這就是為什麼 I have seen him yesterday ✗ 不通:yesterday 把時間釘死在過去了,跟「連到現在」彼此打架。
常見錯誤
- 完成式配明確過去時間:
I have seen him yesterday✗ 要改成 I saw him yesterday. ✓(我昨天看到他了。)有 yesterday 就乖乖用過去式。 - 過去分詞用錯成過去式:
I have went to Japan✗ 要改成 I have been to Japan. ✓(我去過日本。)go 的三態是 go-went-gone,過去分詞是 gone,別跟過去式 went 記混;講「去過某地又回來了」習慣用 been,講「去了還沒回來」才用 gone。 - for 和 since 用反:
I have lived here since three years✗ 要改成 I have lived here for three years. ✓(一段時間用 for。) - 第三人稱忘了用 has:
She have finished.✗ 要改成 She has finished. ✓(he/she/it 用 has。)
一句話幫自己分清楚
下次拿不定主意要用過去式還是完成式,先在心裡問這一句:
「句子裡有沒有明確的過去時間點?這件事跟現在還有關係嗎?」
- 有明確過去時間(yesterday、last year…),就是一段過去紀錄 → 過去簡單式
- 沒講明確時間,而且結果或經驗連到現在 → 現在完成式(have / has + 過去分詞)
如果你還在熟悉「現在」這幾個時態的差別,可以回頭看〈現在簡單式 vs 現在進行式〉那篇,先把「現在」站穩,再往「連到現在」的完成式走,會順很多。
在 Loopy 怎麼練
時態這種東西,光記規則很容易考完就忘。真正記得住的方式,是在一句句真實句子裡反覆遇到它。Loopy 的分級課程會把現在完成式放進貼近 A2–B1 程度的對話情境,讓你在聽、說、跟讀中親耳聽到母語者什麼時候說 I've been to…、什麼時候改口說 I went…;遇到 for/since、already/yet 這些訊號詞,也會在例句裡一次次幫你加深印象,再配合記憶曲線安排複習,把它從規則變成你的直覺。
碰到不確定的過去分詞(been、gone、seen、broken…),隨手用字典查一下三態,順便聽發音跟著念。多練幾回,你就會發現自己不用想也知道——這句到底在講哪個時間。