
过去完成时有一个形象的别称:“过去的过去”。它描述的是在某个过去的时间点之前,就已经发生或完成了的事情。理解这个“时间层次”是掌握这个时态的关键。英语里,当你需要在两个过去事件之间说清楚“谁先谁后”,过去完成时就是你最重要的工具。
比如说,如果你想描述“我到达车站的时候,火车已经开走了”,这里就有两个过去发生的事件:“我到达车站”和“火车开走”。哪一个更早发生?“火车开走”发生在“我到达车站”之前。此时,我们就需要用过去完成时来强调“火车开走”是更早发生的那个事件。英语里,我们会说:When I arrived at the station, the train had already left. 这里的 had left 就标明了“火车开走”发生在“我到达”之前。
另外,过去完成时经常和一些表示过去的时间状语连用,比如“by the time”(在……之前)、“when”(当……时)、“after”(在……之后)、“before”(在……之前)等。这些词语往往提示我们在表达前后顺序时应该考虑用过去完成时。
需要注意的是,过去完成时不是所有叙述过去的句子都要用,只有在需要明确交代一件事情已经在另一个过去事件之前完成,或者想强调事件的发生顺序时才用。如果句子本身的时间顺序已经明确,不一定要强制用过去完成时,这点非常重要。
过去完成时的构成非常统一:had + 过去分词。无论主语是什么人称,一律用 had,不像现在完成时要区分 have 和 has。过去分词的变化规则与现在完成时相同。常用的规则动词直接加-ed,不规则动词的过去分词需要单独记忆(如:go → gone,see → seen,eat → eaten 等)。
举几个不同主语的人称和动词例子:
I had finished. 我已经完成了。
She had left. 她已经离开了。
They had eaten. 他们已经吃过了
He had already gone. 他已经走了。
在过去完成时中,不用根据主语变化 had 的形式,始终都是 had,非常简单。动词需要用过去分词(第三种形式)。
否定句:在 had 后加 not,结构为 had not(缩略为 hadn't)+ 过去分词。例如:
疑问句:将 had 提到句首,结构为 Had + 主语 + 过去分词 + 其他。例如:
要正确使用过去完成时,最重要的是理解事件的时间顺序,即“过去的过去”。可以想象一条时间轴:
时间点 A(过去):使用“一般过去时”来表达,代表叙述的主要过去时间或背景。
时间点 B(更早的过去):发生在时间点 A 之前,要用“过去完成时”来表达,突出其发生得更早。
By the time I arrived at the cinema, the film had already started.
等我到达电影院的时候,电影已经开始了。
这个句子里,“我到达”属于过去(时间点A),而“电影开始”还要早一步(时间点B),因此“电影开始”用过去完成时 had started 表示先发生。
When I called her, she had already left the office.
我打电话给她的时候,她已经离开办公室了。
“我打电话”是后发生的事,是时间点A,用一般过去时;“她离开办公室”是在此之前发生的,是时间点B,要用过去完成时 had left。
例如:
I got home and cooked dinner.
我回家然后做了饭。(这两个动作自然是先回家再做饭,句子清楚不用过去完成时。)
I had cooked dinner before my wife got home.
在我妻子回家之前,我已经把饭做好了。(强调“做好饭”先于“她回家”,这里要用过去完成时。)
总之,过去完成时的核心就是“过去的过去”,用来让时间顺序表达得更清楚、准确。学会区分普通的一般过去和要用过去完成时强调先后,是英语叙述的重要能力。
过去完成时在实际英语交流中不仅仅是一个书本上的语法点,而是经常用来帮助讲清楚故事、经历、解释背景和推理先后顺序。下面我们通过不同的典型场景和丰富的例句来详细理解它的实际用法。
过去完成时最常见的触发词是 by the time(到……的时候)、when(当……时)、before(在……之前)、after(在……之后)。这些词常用来连接两个过去的动作或事件,帮助听众或读者区分清楚“哪个先,哪个后”。

A:Did you catch the beginning of the presentation?
你赶上了开头的报告内容吗?
B:No, by the time I got to the meeting room, the presenter had already been speaking for ten minutes.
没有,等我到会议室的时候,主讲人已经讲了十分钟了。
A:I hadn't eaten anything before the meeting, so I was completely distracted.
会议之前我什么都没吃,所以根本没法集中精神。
举几个类似的例子加深理解:
After I had finished my work, I left the office. 我完成工作后才离开办公室。(说明"完成工作"先于"离开")
By the time the train arrived, we had waited for over an hour. 火车到的时候,我们已经等了一个多小时。
When she called me, I had already finished dinner. 她打电话给我时,我已经吃完晚饭了。
这些例句都体现了过去完成时用于表达“更早的过去”这个作用,帮助理清事件发生的先后。
在讲故事、解释原因、描述某种状态的由来时,过去完成时常用来回顾背景——说明在主要事件发生前,已经有其他事先发生并影响了后面的结果。这样用法有助于逻辑的连贯和层次清楚。
She looked exhausted. She had been on three back-to-back flights and hadn't slept in over 30 hours.
她看起来精疲力竭。她连续坐了三段航班,已经超过30个小时没睡觉了。
“looked”是主要描述的时刻(一般过去时),而“had been on / hadn't slept”交代了导致状态的原因(过去完成时)。
The team was very confident before the final game. They had won every match that season.
决赛前球队信心十足,他们那个赛季赢了每一场比赛。
The streets were wet because it had rained earlier that day.
街道很湿,因为那天早些时候下过雨。
I wasn’t hungry. I had eaten a big lunch.
我不饿,因为中午吃了很多。
这样的结构对于解释“为什么会这样”,理顺前因后果非常实用。
过去完成时也常和一些常见副词——already(已经)、just(刚刚)、never(从未)、yet(尚未,主要用于否定或疑问语境)——搭配使用。这些副词经常也和现在完成时搭配,但如果语境在过去(而不是现在),就要用过去完成时。
I had just sat down when the doorbell rang.
我刚坐下,门铃就响了。
She had never seen snow before she moved to Harbin.
在搬去哈尔滨之前,她从未见过雪。
更多例句:
He hadn’t finished his assignment yet when the teacher collected the papers.
老师收作业时他还没做完。
They had already left when we arrived at the party.
我们到派对时他们已经离开了。
Had you ever heard this song before yesterday?
昨天之前你听过这首歌吗?
这些句型在英语故事叙述、回忆、解释原因时十分地道。
过去完成时的三大典型应用,就是用于讲清两个过去事件的先后(before/after/when/by the time),用于交代背景和原因(说明为什么发生某个状态),以及搭配一些时间副词(already/just/never/yet)描绘经历和变化。通过不断在阅读和写作中体会和应用,你会更灵活、地道地表达不同的时间层次。

在英文叙事和写作中,过去完成时(Past Perfect)和一般过去时(Simple Past)常常一起出现,用来表达过去两个或多个动作发生的先后。很多同学疑惑:什么时候必须用过去完成时?什么时候用一般过去时就够了?其实,关键在于这些事件的顺序是否已经足够清楚。
当我们用 like “before”、“after”、“then”、“by the time”等时间连词明确标注了动作发生的先后顺序时,经常只用“一般过去时”就能让句子自然、准确,并不会造成歧义。这种情况下,英语母语者通常更偏好用简单结构。只有在顺序含糊、或者我们需要特别强调事件的先后关系时,才使用过去完成时来“补充说明”前后的先后。
例如,请看下面两句话的对比:
After she finished dinner, she called him. 她吃完晚饭后给他打了电话。
(一般过去时——after 已经说清楚了顺序,可以不用过去完成时)
这句话里,“after”已经明确告诉我们“吃完饭”比“打电话”先发生,所以一般过去时(finished, called)完全不会引起歧义,也非常简洁自然。
我们来看一个需要用过去完成时的例子:
When I got there, she had already called him. 我到的时候,她已经给他打完电话了。
(过去完成时——强调打电话这件事发生在我到达之前,need to clarify the order)
这句话中,“when”只是标明了“我到达”和“她打电话”这两件事发生的时间,但顺序并不那么突出。用过去完成时“had already called”,就能清楚表达出“她打电话”比“我到”这个动作要早一步,避免产生误解。
如果我们把这两句话做一下总结:
除此之外,实际场景还有很多类似情况。如果叙事当中用了 like “before”、“after”、“then”、“by the time”、“once”等词,基本可以用一般过去时。如果主语和动词变了、动作本身有可能混淆,就建议用过去完成时来“点明”更早发生的一件事。
一些常见表达:
She left after she finished her work.(after 已说明顺序,两个一般过去时)
她做完工作后就离开了。
She had finished her work before she left.(before 带出参照点,过去完成时+一般过去时,突出“完成”比“离开”早)
她离开前已经完成了工作。
I called him when I arrived.(when 顺序模糊,一般默认先 arrived 后 called)
我到的时候给他打了电话。
She had gone out when I arrived.(强调“她早就走了”,我到时人已经不在)
我到的时候她已经出去了。
过度使用过去完成时反而会让语句冗长、繁琐,不如简单明了。只要顺序明确,使用一般过去时通常更自然顺畅。过去完成时是为了精准区分先后关系,不是讲过去的动作就一定要用。
所以,在实际写作和口语中,请多关注时间副词或连词是否已经交代清楚顺序,必要时再用过去完成时,不必生搬硬套。灵活掌握,表达才能更地道!
第一题(选择题)
知识点:过去完成时的构成
下面哪个句子正确使用了过去完成时?
A. By the time he arrived, everyone has already left.
B. She had finished her homework before dinner started.
C. I had went to bed early because I was tired.
D. They have eaten before we called them.
答案是 B。“She had finished her homework before dinner started.”——had + 过去分词 finished,正确;dinner started 是一般过去时作为时间参照。A 中应该用过去完成时 had already left,而不是现在完成时 has already left(✗);C 中 went 是过去式,过去完成时应该用过去分词 gone,变为 had gone(✗);D 中应该用过去完成时 had eaten,而不是现在完成时 have eaten(✗)。
第二题(选择题)
知识点:by the time 与过去完成时的配合
选出使用正确的句子:
A. By the time the ambulance arrived, the patient has already recovered.
B. By the time I finished reading the report, my boss had left for the day.
C. By the time she called, he already left.
D. By the time we got to the station, the train was already gone.
答案是 B。“By the time I finished reading the report(一般过去时,参照时间),my boss had left for the day(过去完成时,更早发生的事)”——结构完全正确。A 中应该用过去完成时 had recovered(✗);C 中 he already left 应该是 he had already left(✗);D 中 was gone 结构不自然,应该是 had already gone(✗)。
第三题(选择题)
知识点:是否有必要使用过去完成时
下面哪个句子中,不使用过去完成时(只用一般过去时)也同样自然清晰?
A. When I arrived at the party, she had already gone home.
B. I didn't know she was there — nobody told me.
C. After he finished work, he had a shower and went to bed.
D. She was shocked because she hadn't heard the news.
答案是 C。“After he finished work, he had a shower and went to bed.”——after 已经清楚地说明了顺序,三个动作依次发生,都用一般过去时就足够自然,不需要在任何一个动词上用过去完成时。A 中 had already gone 强调了她比我早离开,过去完成时有必要(✗去掉会失去强调效果);B 和 D 都需要过去完成时来说明“在某个时间点之前”的状态(✗)。
第四题(情景问答)
知识点:用过去完成时解释“结果的原因”
你的朋友问你:“昨天那场考试你考得怎么样?”你告诉他考得很不理想,原因是考试前一天你生病了没怎么复习,考前一晚又没睡好。请用一般过去时描述考试结果,用过去完成时解释导致这个结果的原因。
参考回答:The exam didn't go well at all. I had been sick the day before and hadn't studied much. On top of that, I hadn't slept well the night before either, so I was exhausted during the exam.(考试考得很不好。考前一天我生病了,没有怎么复习。而且前一晚上我也没睡好,所以考试的时候精疲力竭。)didn't go 是一般过去时描述结果;had been sick / hadn't studied / hadn't slept 是过去完成时描述更早发生的导致这个结果的原因。
第五题(情景问答)
知识点:过去完成时时间轴的理解
有人告诉你这样一件事:“她昨天没来上班,因为她已经辞职了。”请把这句话翻译成英文,并解释句子中哪个动作先发生、哪个后发生,各用了什么时态,以及为什么。
翻译:“She didn't come to work yesterday because she had already resigned.”时间分析:“辞职(resigned)”发生在“没来上班(didn't come)”之前——辞职是更早的事,所以用过去完成时 had already resigned;没来上班是昨天这个参照时间点上的事,用一般过去时 didn't come。because 引导的是原因从句,其中的事件(辞职)发生在主句事件(没来上班)之前,过去完成时在这里明确了这个时间先后关系。