1文字だけの書式指定子は標準の書式指定子として扱われる点に注意が必要です。 例えば、24時間制で0埋めなしの時間部分を表すカスタム書式指定子Hを単独で指定した場合、これは標準の書式指定子として扱われます。 一方、標準の書式指定子Hは存在しないため、例外FormatExceptionがスローされます。

カスタム書式指定子を1文字だけ指定する場合は、先頭に%を付けることによって、それがカスタム書式指定子であることを明示する必要があります。

書式指定文字列において、単独の文字がカスタム書式指定子として扱われるようにする
Imports System

Class Sample
  Shared Sub Main()
    Dim dt As DateTime = DateTime.Now

    Console.WriteLine(dt.ToString())
    Console.WriteLine("%H : {0}", dt.ToString("%H")) ' 時
    Console.WriteLine("%m : {0}", dt.ToString("%m")) ' 分
    Console.WriteLine("%s : {0}", dt.ToString("%s")) ' 秒
    Console.WriteLine("%d : {0}", dt.ToString("%d")) ' 日
    Console.WriteLine("d  : {0}", dt.ToString("d"))  ' 短い形式の日付 (標準の書式指定子)
    Console.WriteLine()

    Dim dto As DateTimeOffset = DateTimeOffset.Now

    Console.WriteLine(dto)
    Console.WriteLine("%H : {0}", dto.ToString("%H")) ' 時
    Console.WriteLine("%m : {0}", dto.ToString("%m")) ' 分
    Console.WriteLine("%s : {0}", dto.ToString("%s")) ' 秒
    Console.WriteLine("%d : {0}", dto.ToString("%d")) ' 日
    Console.WriteLine("d  : {0}", dto.ToString("d"))  ' 短い形式の日付 (標準の書式指定子)
  End Sub
End Class
ja-JPでの実行結果例
2013/04/01 15:00:30
%H : 15
%m : 0
%s : 30
%d : 1
d  : 2013/04/01

2013/04/01 15:00:30 +09:00
%H : 15
%m : 0
%s : 30
%d : 1
d  : 2013/04/01