English.guru
返回

现在完成进行时:免费讲解「做了多久」

Have been 加 -ing——表达持续到现在的动作时长的时态,以及它和普通现在完成时的区别。

I have been waiting for an hour.

不是 I wait,不是 I waited,也不是 I have waited。这个时态只有一个任务:把一个从过去开始的动作和现在这一刻联系起来,并强调它的持续时长。

构成方式

have / has been + 动词**-ing**

主语 形式
I, you, we, they have been working
he, she, it has been working

否定句:She hasn't been sleeping well. 疑问句:How long have you been learning English? 缩写形式:I've been · he's been · they've been

For 和 since

这两个词几乎承担了全部的含义,而混淆它们是一个经典的错误。

  • for + 时间段:for an hour, for three years, for ages
  • since + 起始时间点:since Monday, since 2019, since I was ten

I've been living here for six years. · I've been living here since 2019.

这两句话描述的是同样的六年。For 衡量的是时间段的长度,since 说明的是它从哪里开始。

与普通现在完成时的对比

这两种时态很接近,区别在于关注点不同。

关注点
I have painted the kitchen. 结果——已经刷好了,颜色是新的
I have been painting the kitchen. 过程——所以我浑身都是油漆
  • She has written three emails. —— 现在有三封写好的邮件。
  • She has been writing emails all morning. —— 她整个上午都在这样度过。

一个实用的判断标准:如果可以数出具体数量,通常用简单的现在完成时(I've read two books)。如果你衡量的是时间长度,而不是计算结果的数量,就用进行时(I've been reading all day)。

动作可能还在继续,也可能刚刚结束——两种理解都成立。I've been running 既可以表示「而且我现在还在跑」,也可以表示「所以我现在气喘吁吁」。

用来解释当下的情况

这正是这个时态在日常对话中特别有用的地方。某件事此刻显然是真的,而进行时能解释这是为什么。

  • Your eyes are red. Have you been crying?
  • The streets are wet. It has been raining.
  • I'm exhausted — I**'ve been working** since six.

状态动词依然保持简单形式

其他时态中不加 -ing 的那些动词,在这个时态里同样不加:

know, be, have(表示「拥有」), like, believe, belong

  • ❌ I have been knowing her for years.
  • ✅ I have known her for years.

这一点很重要,因为「多久」这类问题特别容易让人倾向于用进行时——而 know、be、have 恰恰就是人们最想搭配这类问题使用的动词。

  • ✅ I**'ve been** here for an hour.(而不是「I've been being here」)
  • ✅ We**'ve had** this car since 2020.

对话中的用法

遇到一位老朋友

A: You look well. How long have you been living in Berlin?

B: Since March, so about six months. I've been learning German, but it's slow.

A: You've always been good at languages.

B: I've been saying that for years and nobody believes me.

Have been living、have been learning、have been saying 衡量的是延续到现在的一段时间。Have always been 保持简单形式,因为 be 是一个状态动词。

自我检测

下面的测验专门练习 for/since 的区别、结果与过程的对比,以及那些永远不加 -ing 的状态动词。

自我检测:测试:现在完成进行时 →