「八時までに会社に着かなければならない」の「八時までに」はuntil 8:00ではなくby 8:00になります。
untilはある時点までの継続をあらわし、byはある時点よりあとではないという期限をあらわしますが、多くの方がこのふたつを混同します。
これはuntilを「~まで」、byを「~までに」という字句的に似通った語とだけ対応させて記憶している、あるいは記憶しようとしていることが原因だと思います。
以下のように文に入っていれば「~まで」と「~までに」の差は明確です。
(1)わたしは昨夜1時までに勉強した。
(2)わたしは月曜までこのレポートを終えなければならない。
どなたでも読んだ瞬間に違和感を覚え、(1)の「までに」は「まで」の、(2)の「まで」は「までに」の間違いであると気づくでしょう。しかし「~まで」「~までに」という語だけを取り出してしまうと違いがわかりにくくなります。
untilはある時点まで矢印をひっぱっていくようなイメージ、byはある時点より前のどこかにチェックマークをつけるようなイメージで理解し、また覚えておくといいでしょう。
それから使われる動詞とのコンビネーションに注目することも正しく使い分ける手助けになります。untilは継続できる動作や状態をあらわす動詞(study, sleep, workなど)とともに使われ、byは継続できない動作をあらわす動詞(finish, arrive, leaveなど)とともに使われます。
これは日本語の「~まで」「~までに」も同じです。上の(1)(2)をもう一度読んで、文のどの時点で違和感を覚えるか確認してみてください。(1)の「までに」は、あとに継続できない動作がくることを予測させるのに「勉強した」と継続できる動作がくるので違和感を覚えます。(2)の「まで」は継続できる動作を予測させるのに「終える」という継続できない動作がくるので違和感を覚えます。
untilとbyを使うときにも、動詞とのコンビネーションが合っていないと違和感を覚える、という感覚を身につけることが大切です。