Преобразование строки в новый формат - PullRequest
0 голосов
/ 14 февраля 2020

Я запускаю приложение C#, которое извлекает строку даты в формате MM/DD/YYYY, за исключением того, что когда день меньше 10, данные отображаются как MM/D/YYYY. (то есть: он извлекает 2/4/2020 .. не 2/04/2020).

Я сохраняю данные в переменной strDateExtracted.

Когда я вставляю / помещаю данные, приложение требует меня положить его как MMDDYYYY

Например, если я извлекаю 2/4/2020, приложение хочет, чтобы я поставил 02042020.

Мне нужно преобразовать эту строку из MM/DD/YYYY в MMDDYYYY и если день больше 9, то MMDYYYY до MM/0D/YYYY.

Есть мысли?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Учитывая ваш ввод, который, как мы предполагаем, будет иметь 8, 9 или 10 символов и будет правильно отформатирован, например,

12/12/2020 (10 chars)
2/12/2020 (9 chars)
12/2/2020 (9 chars)
2/2/2020 (8 chars)

Мы можем создать C# 8.0 выражение-выражения , которая возвращает правильную строку, используя диапазоны / индексы на входе. Это, возможно, чрезмерно спроектировано, но может быть полезно, чтобы избежать выделения из-за разделения строк, а что нет.

Полная программа приведена ниже, и вы можете запустить ее с этим . NET Скрипка .

using System;

namespace Dates
{
    class Program
    {
        static void Main(string[] args)
        {
            var input = "12/12/2020";
            Console.WriteLine(GetWithoutSlashes(input));
            input = "2/12/2020";
            Console.WriteLine(GetWithoutSlashes(input));
            input = "12/2/2020";
            Console.WriteLine(GetWithoutSlashes(input));
            input = "2/2/2020";
            Console.WriteLine(GetWithoutSlashes(input));

        }

        static string GetWithoutSlashes(string input)
        {
            return input.Length switch
            {
                // First two digits (month), third/fourth digits (day), last 4 digits (year)
                10 => $"{input[..2]}{input[3..5]}{input[^4..]}",

                9 => input[1] == '/'
                    // Single digit month with zero before it, double digit day, last 4 digit year
                    ? $"0{input[0]}{input[2..4]}{input[^4..]}"
                    // First two digits for month, single digit day with a zero before it, year
                    : $"{input[..2]}0{input[3]}{input[^4..]}",

                // Single digit month, day with zero before each, last 4 digit year
                8 => $"0{input[0]}0{input[2]}{input[^4..]}",

                _ => throw new ArgumentException("Bad input!", nameof(input))
            };
        }
    }
}

0 голосов
/ 14 февраля 2020

Есть два возможных способа, которые я могу придумать.

Первый способ, который в основном преобразует строку в DateTime и форматирует ее обратно в требуемый формат:

public string GetDate(string input)
{
    return DateTime.Parse(input).ToString("MM/dd/yyyy");
}

Другой способ, который был бы, возможно, более быстрым, - это разбиение строки по своему усмотрению и добавление 0 по своему усмотрению:

public string GetDate(string input)
{
    var items = input.Split('/');

    if(items[0].Length == 1)
    {
        items[0] = "0" + items[0];
    }

    if(items[1].Length == 1)
    {
        items[1] = "0" + items[1];
    }

    return string.Join("/", items);
}

Обратите внимание, что все это, конечно, основано предполагая, что входные данные и требуемые выходные данные являются строками.

...