汉语没有和现在完成时类似的时态——动词本身不随时态变化,过去发生的动作通常靠「了」「过」这类助词来标记,而这些助词并不对应英语里「一般过去时」和「现在完成时」之间的这种区分。正因如此,现在完成时与一般过去时的区别,是中文母语者最容易感到困惑的地方之一。
核心要点速览
- 一般过去时——描述过去某个确定时间点上已经完成的动作。 I visited Paris in 2019.(我在 2019 年去过巴黎。)
- 现在完成时——动作和现在有关联:具体时间不重要,或者说结果在此刻依然能感受到。 I have visited Paris.(我去过巴黎——具体是什么时候,不作说明。)
现在完成时的构成方式
have / has + 过去分词。规则动词的过去分词和 -ed 形式相同;不规则动词则需要单独记住它们的第三种形式。
| 原形 | 一般过去时 | 过去分词 |
|---|---|---|
| go | went | gone / been |
| see | saw | seen |
| do | did | done |
| write | wrote | written |
| take | took | taken |
| break | broke | broken |
| come | came | come |
| speak | spoke | spoken |
Been 还是 gone? She has gone to Paris——她现在就在那里。She has been to Paris——她去过,现在已经回来了。
一般过去时:确定的时间点
当你说出或暗示动作发生的具体时间时,使用一般过去时。
- She called me yesterday.(她昨天给我打了电话。)
- They finished the project last week.(他们上周完成了这个项目。)
- I was born in 1995.(我出生于 1995 年。)
时间标志词(yesterday、last week、in 1995)是一个信号,表明时间点是明确的,而且已经属于过去。
现在完成时:与现在的联系
当具体时间未知、不重要,或者动作的结果在此刻依然能感受到时,使用现在完成时。
- I have lost my keys.(我把钥匙弄丢了——到现在还没找到。)
- She has visited Japan three times.(她去过日本三次——分别在人生中的不同时候,具体时间不详。)
- We have already eaten.(我们已经吃过了——所以现在不饿。)
尚未结束的时间段
如果提到的时间段还没有结束——today、this week、this year——那么动作仍然处于这个时间段内,需要用现在完成时。
- I've had three coffees today.(这一天还没结束)
- We've sold forty units this month.
- 对比:I had three coffees yesterday.(昨天已经结束 → 用一般过去时)
For 和 since
这两个词都和现在完成时搭配使用,回答的问题却不同。
- for + 持续时长:I've lived here for ten years.
- since + 起始时间点:I've lived here since 2016.
提示词一览
| 提示词 | 对应时态 |
|---|---|
| yesterday, last week, in 2020, ago | 一般过去时 |
| already, yet, ever, never, since, for, just | 现在完成时 |
它们的位置:already、just 和 never 放在 have 和过去分词之间:I've just finished。Yet 放在句末,且只用于疑问句和否定句:Have you finished yet? · I haven't finished yet.
常见错误
❌ I have seen him yesterday. ✅ I saw him yesterday.
一旦你说出了具体的时间(yesterday),就必须使用一般过去时——哪怕直觉上很想用现在完成时。
一条规则能解决大多数情况——如果句子回答的是「什么时候?」这个问题,就用一般过去时。如果回答的是「是否有过这样的经历?」或者「现在结果如何?」,就用现在完成时。
对话中如何在两者之间切换
现在完成时用来开启一个话题,而一旦时间已经明确,一般过去时就用来补充细节。
A: Have you been to the new place on Bridge Street?
B: I have, yes — we went last Friday.
A: What did you think?
B: The food was excellent. I've already booked again for my birthday.
Have you been 问的是笼统的经历,went 和 was 把内容固定在了上周五,而 I've already booked 又把话题拉回了现在。
自我检测
完成下面的测验——这是巩固这两种时态区别最快的方式。