"I have been to London for three weeks." is very weird. Present perfect is used to say that something occurred. "I have been to London." sounds normal because it is only stating that it occurred. This would mean that going to London wouldn't be a new experience. Like, "I have seen him." The point you emphasis here is that at some point you saw him. This would imply you know what he looks like. "I saw him." is saying that in the past you saw him. They sound the same, but they emphasis a different point. "I saw him" has the exact meaning as "I see him." only in the past tense instead of present. Basically one is simply stating that it occurred. It usually isn't important that it happened in the past except for the fact that it has occurred. It countless situations they are they same. I know it probably doesn't help, but most verb forms have subtle meaning differences. When I use a foreign verb sometimes I can only relate it to my native language, but for me I have the difference in my native language.
Here are a few examples of where now difference is made though they sometimes emphasis a different point:
"I read (past tense of read is still spelled the same but pronounced different) that book." - "I have read that book."
"I have written an essay." - "I wrote an essay."