I have seen that film before. 这是一个现在完成时的句子,让人困惑的是句中before的使用。一个表示"过去"时间的词语如何能修饰表示现在的谓语动词have seen?而同样表示过去时间的yesterday却不能修饰现在完成时的谓语动词,我们不能这样表示:I have seen that film yesterday. 这究竟是为什么?
想要弄明白这个问题,我们不但要了解现在完成时的特点,更要正确认识表"过去"时间的before。和别种时态不同的是现在完成时表示的时间其实是包括过去和现在两个时间的,只不过该时态侧重强调的是现在的时间(所以,时态的名称以"现在"相称)。如上述我们举的例句 I have seen that film before. 句中谓语的动作明显是发生于过去,但句子时态强调的却是动作现在状况(已看过电影,对电影内容有所了解)。因此,在选用表示时间的词语修饰现在完成时时,要注意该时态的这个特性。
那么时间副词yesterday为何不能修饰现在完成时呢?这是因为yesterday 是一个表示单纯过去时间的词语,如用来修饰现在完成时便会出现与该时态表示现在时间相矛盾的情况。与yesterday 不同的是,时间副词before 不是一个表示单纯过去时间的词语,它所表示的过去时间是包括现在时间点的过去。这点与用介词since表示时间的道理是一样的,如 I have been a teacher since 2018.(从2018年起我一直从事教学工作。),句中的介词短语since 2018表示的时间就包括了2018年和现在两个时间。before 的这种表时间特点符合现在完成时的特征,所以能用来对现在完成时进行修饰。