你已经学过过去完成时I had finished——两个过去事件中较早发生的那个)和现在完成进行时I've been waiting——持续至今)。过去完成进行时把这两个概念结合起来:表示某个动作在过去某一时间点之前已经持续了一段时间

  • I*'d been waiting** for an hour when the bus finally came.*
  • She was tired because she*'d been working** all night.*
  • They*'d been living** in Rome for a year before they moved to Milan.*

构成是 had + been + 动词-ing

快速公式:主语 + had + been + 动词 -ingI'd been working. She hadn't been sleeping. Had you been waiting long?

如何构成

这三个部分的顺序固定,且 had 不随主语变化:

主语 had been -ing 形式
I / you / he / she / it / we / they had been working、waiting、studying…
  • I had been studying for hours before the exam started.I*'d been studying** for hours before the exam started.*
  • He had been driving all day when the accident happened.
  • We had been planning the trip for months.

因为 had 对所有主语都一样,这里不像过去进行时那样有 was / were 的区分。-ing 形式遵循常规拼写规则(去掉词尾不发音的 -emake → making;以重读闭音节结尾时,双写词尾辅音字母:run → running)——与过去进行时的规则完全相同。

核心用法:某一过去时间点之前的持续时长

这是 B2 阶段的核心用法——表示某件事在另一个过去时间点之前已经持续了多久

  • By 6 p.m., we*'d been travelling** for ten hours.*
  • How long had they been dating before they got married?
  • She*'d been feeling** ill for a few days before she saw a doctor.*

同样使用 for(时间段)或 since(起始点),与现在完成进行时一样,只不过这里的参照点是过去的某一时刻,而不是现在:

  • He*'d been working** there for five years when the company closed.*
  • They had been waiting since dawn when the gates finally opened.

汉语常用“已经……了”加上具体时长来表示某个动作在过去某一时刻之前已经持续了多久,比如“大门终于打开时,他们已经等了好几个小时了”。汉语没有与过去完成进行时完全对应的语法形式;英语的 had been + -ing 额外强调动作在那个过去时间点之前一直持续,而不只是曾经发生过。

用近期原因解释过去的状态

正如现在完成进行时用来解释现在的状态,过去完成进行时用来解释过去的状态——某个动作不久前一直在发生,无论它是刚刚结束还是仍在继续,它造成的影响在那个过去时刻是看得见的:

  • Her clothes were wet because she*'d been swimming**.*
  • He was out of breath — he*'d been running**.*
  • The kitchen was a mess. Someone had been cooking.

这就像站在过去的某个时间点,回头看是什么原因导致了眼前的状况——和 I've been working, that's why I'm tired 的逻辑一样,只是把时间往前推了一步。

过去完成进行时与过去完成时的对比

两者都是从过去某一时间点往回看,侧重点的差异类似于现在完成时和现在完成进行时之间的差异:

过去完成时 过去完成进行时
侧重点 结果、数量或已完成的事件 进行中的动作或其持续时间
示例 She had written three emails before lunch.(三封——数量重要) She*'d been writing** emails all morning.*(持续的动作重要)
示例 He had finished the report when I called.(已经完成) He*'d been writing** the report when I called.*(可能还没完成)

简单的判断方法:如果强调结果、数量或已经完成的事件,就用过去完成时;如果强调持续时间或动作的进行状态,就用过去完成进行时:

  • I*'d read** four chapters by the time she arrived.*(读完的章节数 = 结果)
  • I*'d been reading** for an hour by the time she arrived.*(读了多久 = 持续时间)

过去完成时也常用于表示持续时间——当整个时间段被当作一个已完成的事实来陈述时,尤其是像 live、work、studyteach 这类可表示长期情况的动词:I had worked there for five years before I left. 过去完成进行时则更强调动作的持续性或进行状态:I'd been working there for five years and still didn't feel settled.

有些动词两种形式都自然,含义略有不同:I'd lived there for years(过去完成时——常见于长期情况)与 I'd been living there for years(过去完成进行时——略强调持续进行)。两者均正确。

过去完成进行时与过去进行时的对比

这两种时态回答的是不同的问题。过去进行时描述的是过去某一具体时刻正在发生的事;过去完成进行时描述的是一直持续到过去某个较晚时刻的动作:

  • At 8 p.m., I was cooking dinner.(正是那一刻——过去进行时)
  • By the time she arrived, I*'d been cooking** for an hour.*(在那个较晚时刻之前已持续的时间——过去完成进行时)

状态动词通常仍用简单形式

描述状态而非动作的动词——know、believe、understand、like、love、need、own、have(表示拥有)——即使在过去时态里,表达持续时间时通常也仍用简单形式:

  • I'd been knowing him for years before I found out. → ✅ I'd known him for years before I found out.
  • She'd been having the car since 2018.(表示拥有)→ ✅ She'd had the car since 2018.

和往常一样,这些动词中有些在表示临时性或动作性含义时可以用进行式(He'd been having second thoughts),但以其核心状态含义使用时不行。

否定形式

not 放在 hadbeen 之间——通常缩写为 hadn't

  • I hadn't been sleeping well before the trip.
  • They hadn't been speaking for months when they finally made up.

疑问句

在疑问句中,had 移到主语前面:

  • Had you been waiting long?
  • Had she been feeling unwell before the appointment?
  • How long had they been living there?

简短回答:Yes, I had. / No, I hadn't.

常见错误

  • I had been wait for an hour. → ✅ I had been waiting for an hour.been 后面要接 -ing 形式)
  • She had been been working all day. → ✅ She had been working all day.(只能有一个 been
  • How long you had been waiting? → ✅ How long had you been waiting?(疑问句中 had 要移到主语前面)
  • We had been living there since three years. → ✅ We had been living there for three years.three years 是时间段,要用 for
  • I'd been knowing her since school. → ✅ I'd known her since school.(状态动词 → 过去完成时简单形式)
  • He had been finished the report when I arrived.(混用了两种形式)→ ✅ He had finished the report when I arrived.(结果 → 简单形式)或 He*'d been writing** the report when I arrived.*(进行中 → 进行式)——但不能两者同时使用。

自我检测

应该用过去完成时,还是过去完成进行时?

  1. By the time the ambulance arrived, he ____ (lie) on the ground for ten minutes.
  2. She ____ (write) three chapters before her laptop broke.
  3. ____ you ____ (wait) long when the taxi finally showed up?
  4. They were exhausted because they ____ (hike) since sunrise.
  5. I ____ (know) him for years before he told me his real name.
查看答案
  1. had been lying(在救护车到达前已经持续了十分钟)
  2. had written(章节数量 = 结果)
  3. Had you been waiting(出租车到来之前持续的时间)
  4. had been hiking(持续的动作解释了疲惫)
  5. had known(状态动词 → 简单形式,即使表达持续时间也是如此)

重点总结

  • 过去完成进行时 = had + been + 动词-ing——had 不随主语变化。
  • 用于表示某个动作在过去某一时间点之前持续的时间for / since),或用近期原因解释过去的状态(she was wet — she'd been swimming)。
  • 与**过去完成时(简单形式)**相比:简单形式 = 结果、数量或已完成的事件;进行式 = 进行中的动作或其持续时间。
  • 过去进行时相比:过去进行时 = 发生在过去某一具体时刻;过去完成进行时 = 持续到过去某个较晚时刻的时长。
  • 状态动词know、have、own、like 等)即使在过去时态里,表达持续时间时通常仍用简单形式:I'd known him for years.
  • 否定形式:hadn't been + -ing。疑问句:Had + 主语 + been + -ing?