what was wrong with the first option?
Метод String.Format() имеет 5 перегрузок, ни один из которых имеют два аргумента, которые могут принимать DateTime в качестве первого аргумента. Что будет дальше, зависит от того, каким способом вы хотите использовать Visual Basic. Вы можете поместить это в верхней части файла исходного кода:
Option Strict On
и компилятор VB.NET получает требователен кода. Теперь вы получите ошибку компиляции времени:
Overload resolution failed because no accessible 'Format' can be called with these arguments
Очевидно, у вас есть поэтому он пытается сделать, чтобы сделать чай из листьев вы даете ему. Существует только одна перегрузка String.Format(), которую все еще можно вызвать, это перегрузка Format (String, Object). С должен был написать такой код:
Dim str = String.Format("The time is {0:HH:mm}", Dt)
Функция, называемая композитным форматированием. В вашем случае этот метод можно вызвать только в том случае, если компилятор VB.NET сначала преобразует DateTime в строку автоматически. Фактически вы будете звонить:
Dim str = String.Format("1/1/1900 8:00:00 pm", "HH:mm")
Который не делает то, что вы надеялись.
Обычно лучше всего изучить кодирование VB.NET, всегда включив опцию Strict. И только выключите его, когда вы знаете язык достаточно хорошо, чтобы выжить в таких случаях. Вы можете указать Visual Studio на всегда включить эту опцию. Инструменты + Опции, проекты и решения, значения VB по умолчанию и изменение параметра «Строгий выбор» на «Вкл.».
Ничего себе, этот работает, но что случилось с первым вариантом? – OrElse
String.Format() предназначен для использования заполнителей типа {0}, {1} и передачи значений в качестве параметров. – Jaxedin