haven't been in 后面不能直接加for+时间, in 后面一般加地点,然后再加时间,如: I haven't been in this city for a long time. (for可以加后面),意思:我很久都不在这个城市了。 (in 在。。。里,在。。。地方)
have/haven't been to 后面也不能直接加for+时间,可以这样: I have /haven't been to that city for a long time. to 后面加地点,然后再加for。 (我已经很久没去过那座城市了。been to 去过,说话的时候人不在那里。)
have/haven't gone to 后面加地点之后,也不能加for,因为,说话的时候人已经在那里了。如: He has gone to HongKong。他去了香港。说话的时候人已经在香港了,隐含的意思就是说,他现在人不在这里。而for是要一段时间的,如果说他去了香港好几天了,应该:He has been there (指HongKong) for a few days already.