I have found on wikipidea that you can't use specific time in past for present perfect tenses, e.g.

  • I have done it on last monday.
  • I have done it yesterday.

But, I wonder why are we allowed to say:

  • I have done it before.
  • I have done it in the past.

My speculation is that we can not put a specific time in a present perfect tense, but we can put time intervals. Like I have done it for ten years(interval of time). Similarly before and in the past are intevals of time, not points in time. Hence, the following should be incorrect:

  • I have eaten two hours ago.
  • I have done that a couple of minutes ago.
  • I have done that long time ago.

Please give the grammatical reason for this and provide official/canonical references to back up your claim. Grazie.


Why questions about language are usually pointless: the answer is "because that is how the language is".

But I'll attempt an explanation nonetheless.

The perfect is used when we want to present the activity as having relevance to the present. Sometimes that relevance is about the result of the activity; other times it is because the activity is represented as continuing to the present, or in a period that is thought of as continuing to the present.

When you use a specific time in the past, that time cannot include the present. It doesn't make any difference how long or short the time is: last year or last Tuesday, or at 15:35 last Tuesday.

When you use a phrase like before or in the past, that is a period which can be regarded as extending up to the present (even "in the past" does that), so the perfect is possible.

Some periods can be either, with different meanings:

I haven't seen him today.

presents the time as continuing to now, so implies that there is still a possibility of seeing him.

I didn't see him today.

presents the time during which I might have seen him as finished, so implies that there is now no possibility of seeing him today.

Of your final three examples: they are not idiomatic for the same reason.

Note, however, that they become possible with a comma, making the time an afterthought:

I have done that, a long time ago.

This suggests that when I said "I have done that", I was thinking of it just "sometime in the past"; but I then qualified it with "a long time ago".

| improve this answer | |
  • 1
    How about, Joe: Have you ever smoked a bong? Bill: Mate, I have done it many times before. OR Bill: huh!, I have just smoked one a few minutes ago. I think if before can mean the action is still represented in present the same is true for a few minutes ago. To me I have done it before means the action was finished in the past; although it might be relevant to the the present situation. But, the same can be true for a few minutes ago. – user31782 Feb 29 at 10:24
  • 1
    Ago designates a time a definitely in the past, so it rules out the perfect just like other specific times. Before designates a vague but extended period of time which can extend up to the present, so it can accept the perfect. – Colin Fine Mar 1 at 0:06
  • 1
    @anouk Tthe experience of a bong taken a few minutes ago certainly has an effect in the present. Actually, the intonation would indicate that too. Edit: On a side note: I asked this question to a few native Australians in my factory and except the pommy migrant others found have done it yesterday legitimate English. – user31782 Mar 1 at 11:15
  • 1
    @confusedguy: this is a normal use. When talking about multiple places where somebody has lived, the various residences are spread over a time which may be regarded as continuing to the present: he might carry on living in more places. You could not use the perfect about where somebody had lived who has now died, – Colin Fine Mar 1 at 14:47
  • 1
    @confusedguy: Yes, that's fine. But not if you said when you lived in Paris. – Colin Fine Mar 1 at 15:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.