Форматирование любой даты в ММ / ДД / ГГГГ - PullRequest
0 голосов
/ 21 июня 2010

Привет! В настоящее время я работаю над некоторыми отчетами SSRS, и данные, которые я получаю, представлены в широком диапазоне. Я получаю даты в формах: 18.06.2010 6:00:00, 6/18/2010, 2010/6/18

Я надеялся, что мне удастся придумать код форматирования, который будет использоваться для строки, чтобы он мог преобразовать любой из них в формат MM / dd / yyyy, а все остальное просто не трогать. К сожалению, объем моих навыков VB не соответствует моей цели. Я надеялся, что кто-нибудь сможет мне помочь с этим. Я думал что-то вроде iif (me.Value = #### / ## / #### @ ##: ##: ## @@ &, MM / dd / yyyy, ничего), но это не не похоже на работу.

Заранее спасибо.

EDIT: = iif (isDate (me.Value), "MM / dd / yy", ничего) работает для всего, кроме чего-то вроде 2010/06/18.

Ответы [ 5 ]

1 голос
/ 03 мая 2012

Если вы знаете, что me.Value всегда будет датой, просто в разных форматах вы можете закодировать выражение типа

=DateTime.Parse(Fields!me.Value).ToString("MM/dd/yyyy")

Если возвращаемые данные могут быть или не быть датой, то лучше всего создать блок кода, например,

Public Function FormatDate(Value as String) As String
    Dim NewDate as DateTime

    If (DateTime.TryParse(Value, NewDate)) Then
        FormatDate = NewDate.ToString("MM/dd/yyyy")
    Else
        FormatDate = ""
    End If
End Function

И затем назовите этот блок кода в вашем выражении как

=Code.FormatDate(Fields!me.Value)

Функция DateTime.Parse может определять множество различных форматов дат. Единственная проблема заключается в том, что в зависимости от культуры, в которой работает .Net, дату, такую ​​как 1/2/2012, можно интерпретировать как 2 января 2012 года или 1 февраля 2012 года.

0 голосов
/ 22 июня 2010

Я не могу комментировать.Это VB classic (VB6) или VB.NET?

0 голосов
/ 21 июня 2010

Может быть, вы можете взглянуть на метод Date.Parse. Некоторые примеры доступны здесь

0 голосов
/ 21 июня 2010
\b(?<year>\d{4})/(?<month>\d{1,2})/(?<day>\d{1,2})\b|\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{4})\b

извлечет год, месяц и день из вашей строки. Он ожидает четырехзначный год, принимает в качестве разделителей только косые черты и ожидает месяцы всегда раньше дней.

Он не выполняет никакой проверки (проверка правильности дат), но это не то, что регулярные выражения очень хороши - это должно быть сделано программно, если это вообще необходимо.

Так что в Visual Basic это должно выглядеть как

Dim RegexObj As New Regex("\b(?<year>\d{4})/(?<month>\d{1,2})/(?<day>\d{1,2})\b|\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{4})\b")
year = RegexObj.Match(SubjectString).Groups("year").Value
month = RegexObj.Match(SubjectString).Groups("month").Value
day = RegexObj.Match(SubjectString).Groups("day").Value
0 голосов
/ 21 июня 2010

Вы пробовали String.Format("{0}", my_formatting)

http://idunno.org/archive/2004/14/01/122.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...