現在完了形と現在進行形は、大きく捉えると現在形の仲間なのです。
どう考えても「現在」とは見なせない表現とは結びつけられない、ということです。
ちなみに、過去完了形と過去進行形は、同じように過去形の仲間です。
例えば、for three years「3年間」は、
過去の3年間とも捉えられるし、
この3年間を一括りの現在のこと、と捉えることもできます。つまり現在(完了)形とも過去(完了)形とも合わせることができるのです。
ですから「特定の時」を表す表現ではありません。
ところが
when〜 というのは、「【今ではない】〜するとき/したとき」ということですから、
過去のことか未来のことかわからないけど、現在のことではないというのは間違いありません。
またyesterday とかlast monthとかは明らかに現在ではない過去の話になります。
a week ago とかもそうです。「現在から見て1週間前」だから、現在とは切り離された過去の話です。
next week とかtommorow とかのような未来の時も同じです。現在とは区別した未来の表現です。
since three years ago 「3年前から」はどうでしょう?
3年前からいつまでの話なのか がはっきりしないですね。3年前から現在まで なら現在完了で使えます。
6年前から3年前までの期間なら、普通3年前は過去のこととして考えるだろうから、過去完了になるでしょう。
つまり「特定の時」というのは【現在とは別のものとして表す時】のことです。
現在と見なせないことには、現在進行形や現在完了形を使うことができないということです。
ちなみに現在形は特殊で、「現在」のことと言うよりは、特定の時にこだわらないこと(普遍的なこととか、一般的な法則とか、習慣的に行うこと)を表すために使うので、尚更分かりにくいかもしれないですね。
訂正(1行目)
完了形とwhenは~ → 現在完了形とwhenは~