12 годинна конверсія


10

Виклик

Перетворення та друк часу у 12-годинному форматі. HH:MM AM/PM

Приклади

Вхід:

  • 'Fri Jun 30 2017 21:14:20 GMT-0700 (PDT)'
  • 'Fri Jun 30 2017 00:10:23 GMT-0700 (PDT)'
  • 'Fri Jun 30 2017 12:10:23 GMT-0700 (PDT)'
  • 'Sat Jun 31 2018 8:06:20 GMT-0700 (PDT)'
  • 'Fri Jul 01 2017 01:14:20 GMT-0700 (PDT)'
  • 'Sat Apr 10 2020 09:06:20 GMT-0700 (PDT)'

Вихід:

  • 9:14 PM
  • 12:10 AM
  • 12:10 PM
  • 08:06 AM
  • 1:14 AM
  • 09:06 AM

Тонкі бали

  • Нуль перед одноцифровим числом у порядку , нуль також не допускається. Наступні приклади дозволені :

    • 9:06 AM

    • 09:06 AM

  • Всі перевірені роки будуть після 999(кожен рік буде точно 4 цифрами)

Правила


Пропоновані тестові випадки: 00:10:23 --> 12:10 AMта 12:10:23 --> 12:10 PM.
Арнольд

там ми йдемо. Не соромтесь редагувати, якщо ви бачите щось інше, що я повинен змінити. дякую за пропозицію!
zoecarver


2
Чи можемо ми припустити, що час заданий у часовому поясі, в якому виконується програма? (наприклад, 'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'для мене)
ETHproductions

9
erm, 31 червня не існує. Це точно?
Ерік Лагергрен

Відповіді:


7

JavaScript (ES6), 69 байт

d=>new Date(d).toLocaleString(0,{hour:n='numeric',minute:n,hour12:1})


JavaScript (ES6), 58 55 байт

Припускає, що ви перебуваєте у Сполучених Штатах.

d=>new Date(d).toLocaleTimeString().replace(/:.. /,' ')


JavaScript (ES6), 81 78 байт

Відповідь перед виведенням ведучого 0 в одноцифрових годинах був необов’язковим, а тестові випадки без провідних 0 були додані.

d=>([m,s]=d.slice(16).split`:`,`0${m%12||12}:${s} ${m<12?'A':'P'}M`.slice(-8))


1
Я думав про зміну ${m>12?'P':'A'}Mна ${"AP"[m>12]}M, але це не працює без введення індексу до цілого числа (наприклад, з |0), що робить його однаковою довжиною. Чудово гольф.
kamoroso94

Ви можете опустити ,21фрагмент, щоб зберегти 3 байти.
Рік Хічкок

Повертається 00:10 для Fri Jun 30 2017 12:10:23 GMT-0700 (PDT). Повинен бути прем’єр. Зміна m>12на це m>11повинна виправити.
Рік Хічкок

щоб заощадити 4 байти:d=>(new Date(d).toLocaleString(0,{hour:'numeric',minute:'numeric',hour12:1}))
zoecarver

Насправді ви могли фактично зберегти 25 байт із наступним:d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver

6

Python 2 , 66 байт

lambda s:`int(s[15:18])%12`+s[18:21]+'  APMM'[int(s[15:18])>11::2]

Спробуйте в Інтернеті!


Це не вдається за роки, у яких менше 4 цифр (хоча я не впевнений, чи потрібно це працювати з ними).
notjagan

Я думаю, що це добре.
zoecarver

@notjagan цього не потрібно, про це йдеться у питанні.
Федоне

@totallyhuman На жаль, вибачте.
Федоне

Ви можете змінити , int(s[15:18])>11щоб s[15:18]>"11"?
ETHproductions

5

sh + coreutils, 22 байти

date +%I:%M\ %p -d"$1"

(Якщо дозволені секунди, тоді date +%r -d"$1"достатньо.)


вражаюче мало байт! також молодець
zoecarver

4

JavaScript (ES6), 77 байт

Припускає, що рік має 4 цифри.

s=>`${([,,,h,m]=s.match(/\d./g),x=h%12||12)>9?x:'0'+x}:${m} ${'AP'[h/12|0]}M`

Тестові справи


Як і вище, я знайшов менший спосіб створення та відповіді. Не соромтеся використовувати мій код, я не думаю, що це дійсно так, щоб відповісти на моє власне питання. d=>(new Date(d).toLocaleTimeString().replace(/:\d+/,''))
zoecarver

@pudility Це спрацює лише в тому випадку, якщо є en-USваш локальний і ваш часовий пояс GMT-0700 (PDT). Наприклад, жодне з цих припущень для мене не відповідає дійсності.
Арнольд



1

PHP, 45 байт

Відповідь покращилася завдяки маневреності

<?=(new DateTime($argv[1]))->format('h:i A');

Перша спроба:

<? $d=new DateTime($argv[1]);echo$d->format('h:i A');

Приклад використання через php CLI:

php d.php "Sat Apr 10 2020 09:06:20 GMT-0700 (PDT)"

Це моя перша спробу гольфу.


Немає необхідності в змінної $dі таким чином ви не можете позбутися від явного echo: <?=(new DateTime($argv[1]))->format('h:i A');.
манатура





0

C #, 145 байт

namespace System.Linq{s=>{var d=DateTime.Parse(string.Join(" ",s.Split(' ').Skip(1).Take(4)));return d.ToString("h:mm ")+(d.Hour>11?"PM":"AM");}}

Повна / відформатована версія:

namespace System.Linq
{
    class P
    {
        static void Main()
        {
            Func<string, string> f = s =>
            {
                var d = DateTime.Parse(string.Join(" ", s.Split(' ').Skip(1).Take(4)));

                return d.ToString("h:mm ") + (d.Hour > 11 ? "PM" : "AM");
            };

            Console.WriteLine(f("Fri Jun 30 2017 21:14:20 GMT-0700 (PDT)"));
            Console.WriteLine(f("Fri Jun 30 2017 00:10:23 GMT-0700 (PDT)"));
            Console.WriteLine(f("Fri Jun 30 2017 12:10:23 GMT-0700 (PDT)"));
            Console.WriteLine(f("Fri Jul 01 2017 01:14:20 GMT-0700 (PDT)"));
            Console.WriteLine(f("Sat Apr 10 2020 09:06:20 GMT-0700 (PDT)"));

            Console.ReadLine();
        }
    }
}


0

MATL , 9 байт

5:24)16XO

Спробуйте в MATL онлайн! Або перевірити всі тестові випадки .

Пояснення

5:24    % Push array [5 6 ... 24]
)       % Implicit input. Get characters at those positions. This
        % removes the first four characters with the day of the week
16      % Push 16
XO      % Convert to date string format 16, which is 'HH:MM PM'
        % Implicitly display

Чи можемо ми мати пояснення?
повністюлюдський

1
@totallyhuman Звичайно, дякую, що нагадали. Відредаговано. В основному вбудованийXO робить більшу частину роботи
Луїс Мендо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.