Back to Blog

現在完成式 have + 過去分詞:到底在講哪個時間?一句話分清楚

現在完成式 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.(我昨天弄丟鑰匙,但找到了。),那就只是在講一段過去的小插曲,跟現在無關了。

訊號詞:句子裡的時間線索

句子裡常藏著訊號詞,看到它們就知道該往現在完成式想。

forsince:講「持續多久」和「從何時起」

  • for + 一段時間I have studied English for five years.(我學英文學了五年了。)
  • since + 一個起點I have studied English since 2020.(我從 2020 年就開始學英文了。)

訣竅:for 後面接「多長」(two daysa week),since 後面接「從哪個點開始」(Mondaylast 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.(我把鑰匙弄丟了。)→ 沒講時間,重點是現在還沒找到,用完成式

判斷訣竅(帶得走的):先問自己——句子裡有沒有 yesterdaylast weekin 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
  • forsince 用反I have lived here since three years ✗ 要改成 I have lived here for three years. ✓(一段時間用 for。)
  • 第三人稱忘了用 hasShe have finished. ✗ 要改成 She has finished. ✓(hesheithas。)

一句話幫自己分清楚

下次拿不定主意要用過去式還是完成式,先在心裡問這一句:

「句子裡有沒有明確的過去時間點?這件事跟現在還有關係嗎?」

  • 有明確過去時間(yesterdaylast year…),就是一段過去紀錄 → 過去簡單式
  • 沒講明確時間,而且結果或經驗連到現在 → 現在完成式(have / has + 過去分詞)

如果你還在熟悉「現在」這幾個時態的差別,可以回頭看〈現在簡單式 vs 現在進行式〉那篇,先把「現在」站穩,再往「連到現在」的完成式走,會順很多。

Loopy 怎麼練

時態這種東西,光記規則很容易考完就忘。真正記得住的方式,是在一句句真實句子裡反覆遇到它。Loopy 的分級課程會把現在完成式放進貼近 A2–B1 程度的對話情境,讓你在聽、說、跟讀中親耳聽到母語者什麼時候說 I've been to、什麼時候改口說 I went;遇到 forsincealreadyyet 這些訊號詞,也會在例句裡一次次幫你加深印象,再配合記憶曲線安排複習,把它從規則變成你的直覺。

碰到不確定的過去分詞(beengoneseenbroken…),隨手用字典查一下三態,順便聽發音跟著念。多練幾回,你就會發現自己不用想也知道——這句到底在講哪個時間。