我在看到这个例句的时候相当不解“I heard on the grapevine that you're leaving. 我听小道消息说你要离开。----《牛津词典》”,为什么用heard而不是had heard,经过chatgpt指点,一般过去时是侧重于过去的单个动作,而过去完成时则建立两个过去动作之间的关系,指示哪个动作较早发生,那么答案呼之欲出了,you are leaving是将来要发生的动作,不属于过去完成时的范畴
一般现在、过去、将来时是三个『绝对时态』.
而过去/现在完成时, 是在相对上面三个状态进行的偏移.
因此如果句子里已经有一个『绝对时态』了(或者有since之类的修饰), 那你才可以用『完成时』
比如发生在一个过去, 那我们用did, 如果要强调是在这个did之前, 那就用had done. 句子里一般得先存在个绝对时态, 之后才能有相对时态.
Before I went to school, he ate an egg. 可以
Before I went to school, he had ate an egg. 更可以了.
在这个基础上, 根据动作持续不持续, 来加进行时.
Before mom came back, he had been watching tv.
仅仅从我知道的范围说。
过去完成时一般会和一般过去时同时用。
为什么这么说呢?
因为过去完成时描述的是,某个事件在过去某一个时间点之前,已经发生。划重点,这里两个词都很重要,“在过去某一个时间点”和“之前”。
所以你得先有一个过去时间点,和一个之前发生的事情。
比较有代表性的用法:I went to his home yesterday night, but he had gone.
前一句一般过去式,后一句是过去完成时。因为这个人已经在你去他家之前走了。他走了这件事发生得比你去他家早。
换言之,如果没有一个过去发生的事情作为时间节点,你也不会用过去完成时来说明这个时间节点之前发生的事情。
前一个例子如果改一个只用一般过去式方式说,很有可能你需要这样说了:he left his home at nine o'clock, but I went to his home at eleven o'clock. So unluckily, I didn't meet him.
补充:
我觉得比较容易混淆的是一般过去式和现在完成时。
一个很简单的区分方法,一个描述过去发生的某件事的句子里,这件事如果有明确的时间发生点,那么用一般过去时;没有则现在完成。
具体什么意思呢?一个例子你就马上懂了。
I went to America two years ago.
I have been to America.
两个句子的意思分别是:
我两年前去了美国。
and
我去过美国。
前一个句子可能是在回答:你什么时候去了美国?
后一个句子可能出现的情况是:别人问你去了什么国家旅游,你回答说,我去了美国、意大利、巴西、日本,etc.
前者的时间点是重要信息;后者干没干过才是重点,发生在什么时间不重要。可能昨天发生,可能三年前发生,可能二十年前发生。