DateTime/DateTimeOffsetでは、標準の書式指定子O/o(書式指定子 §.O, o (round-trip date/time))またはs(書式指定子 §.s (sortable date/time))によってISO 8601の拡張形式で文字列化することができます。 ただし、いずれの書式でも日付部分には(グレゴリオ暦での)年月日が用いられます。

ISOWeekクラスには日付をISO週暦での年・週・曜日を用いた形式で文字列化するメソッドは用意されておらず、また(少なくとも.NET 5時点では)標準の書式指定子にもそういった書式は用意されていません。 そのため、必要な場合はISOWeekクラスのメソッドを組み合わせて独自に実装する必要があります。

ISO週暦での日付をISO 8601拡張形式で文字列化する
Imports System
Imports System.Globalization

Class Sample
  Shared Function GetISOWeekdayNumber(ByVal d As DateTime) As Integer
    Return If(d.DayOfWeek = DayOfWeek.Sunday, 7, CInt(d.DayOfWeek))
  End Function

  ' DateTimeで与えられる日付をISO 8601拡張形式(年・週・曜日)で文字列化する
  Shared Function ToISO8601WeekDateFormatString(ByVal d As DateTime) As String
    Return String.Format(
      "{0:D4}-W{1:D2}-{2:D2}",
      ISOWeek.GetYear(d),       ' DateTimeに対応するISO週年を取得
      ISOWeek.GetWeekOfYear(d), ' DateTimeに対応するISO週番号を取得
      GetISOWeekdayNumber(d)    ' DateTimeに対応するISO曜日番号を取得
    )
  End Function

  Shared Sub Main()
    Dim dates As DateTime() = {
      New DateTime(2019, 12, 29),
      New DateTime(2019, 12, 30),
      New DateTime(2020, 1, 1),
      New DateTime(2020, 6, 30),
      New DateTime(2020, 12, 31),
      New DateTime(2021, 1, 3),
      New DateTime(2021, 12, 31)
    }

    For Each d As DateTime In dates
      ' ISO 8601拡張形式の年・月・日(秒の端数部を除く)および年・週・曜日の書式で文字列化する
      Console.WriteLine(
        "{0} => {1}",
        d.ToString("s"),
        ToISO8601WeekDateFormatString(d)
      )
    Next
  End Sub
End Class
実行結果
2019-12-29T00:00:00 => 2019-W52-07
2019-12-30T00:00:00 => 2020-W01-01
2020-01-01T00:00:00 => 2020-W01-03
2020-06-30T00:00:00 => 2020-W27-02
2020-12-31T00:00:00 => 2020-W53-04
2021-01-03T00:00:00 => 2020-W53-07
2021-12-31T00:00:00 => 2021-W52-05

MENTAにてテキストチャットによるサポートを行っています。 問題の解決法をお探しの方や.NET/C#を学習中の方はどうぞご利用ください。