I am unsure about these three ways of asking if someone knows something. I was told that in certain contexts, such as when asking for the time, Вы не знаете was the norm. On the other hand, I was told that ли is used when you are unsure if the person you are asking knows about something. And Вы знаете is just a direct translation. What exactly is the difference between these three expressions, and exactly when are each used?
"Вы не знаете?" is a quite an informal and polite(ish) way of asking random people for directions e.g.:
- Вы не знаете, где библиотека?
- Вы не знаете, как пройти на вокзал?
- Вы не знаете, который час?
The point here is not whether they know something, it's just a form of request. "Не" (not) is quite common in such type of questions / requests:
- Здесь не занято? - Is this seat taken?
- Не могли бы Вы подвинуться? - Would you mind moving over?
"Вы знаете?" is a way to ask if people know something (which you might know already):
- Вы знаете, сколько людей погибло во Второй мировой войне?
- Вы знаете, каково быть многодетной матерью?
- Вы знаете, что здесь нельзя переходить улицу?
- Так Вы знаете?! - So you do know?!
"Вы знаете ли?" does not sound proper to me. Maybe in some 200 year old book you might find "Вы знаете ли Иванова?"
Some books introduce curious facts with "Did you know?". In Russian that would be "Знаете ли вы?" (Note the present tense.) Here "вы" is spelled with a lowercase "в" because it addresses an indeterminate number of people, rather than someone personally (Вы).
Much hinges on intonation and punctuation marks.
- Вы не знаете, как тяжело быть учителем! - You don't have a clue how it is to be a teacher! (a bitter rebuke)
Вы не знаете, совершенно случайно так, где моя ручка? - Don't you know by pure accident where my pen is? (A humorous rebuke demonstrating that you are almost sure that it is the adressee of the question who sniped your pen)
- Вы, знаете ли, проваливайте лучше отсюда! - You know what? You better start scramming out of here! (a covert aggression)
Formal and correct version would be "Знаете ли вы?" or "Не знаете ли вы?" which is a typical example of ли particle's use in questions. Both forms are considered extremely polite, so they can sound unnatural in context where politeness is not meant. Both express wonder if subject could actually know the answer, the order of words is important. E.g.
Простите, не знаете ли вы, как пройти к почте? (lit) Excuse me, do you know way for Post Office?
"Вы не знаете (ли)" is next on politeness ladder. The role of negation particle here is curious. Just like modern English assumes that person might not give you benefits and expressing your own fault at ignorance (hence today we say "Excuse me" instead of "Pray thee"), Russian may express assumption of lack of such knowledge or lack intent to share it.
"Вы знаете" is not a question. It's a statement. Compare to "You do know".
In case of some verbs, including "to know", it may be used for emphasis as part of other statement where speaker informs about something, sometimes without proverb.
"Вы знаете, я не хочу тратить на это время." "You know, I don't want to waste time on this."
There is a direct parallel between "Знаете" and "You know", "Видите" and "You see". If "you" is meant to be singular, it would be "Знаешь" and "Видишь".
All forms above may be used with singular conjugation of verb and singular pronoun (if any) to less formal effect.
"Вы знаете ли" is something odd in way of word order and it's not used in modern speech unless speaker horribly fumbles.