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 AM12:10:23 --> 12:10 PM
Arnauld

我们去了。如有其他需要修改的地方,请随时进行编辑。谢谢你的建议!
zoecarver'7


2
我们是否可以假设时间是在程序运行所在的时区中给出的?(例如'Fri Jun 30 2017 21:14:20 GMT-0400 (EDT)'对我而言)
ETHproductions'July

9
erm,6月31日不存在。准确吗?
埃里克·拉格伦

Answers:


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'7

您可以,21在切片中省略以节省3个字节。
里克·希区柯克

为返回12:10 AM Fri Jun 30 2017 12:10:23 GMT-0700 (PDT)。应该是下午。更改m>12m>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'7

@notjagan不必这样做,它在问题中这样说。
Fedone

@totallyhuman糟糕,抱歉。
Fedone

您可以更改int(s[15:18])>11s[15:18]>"11"
ETHproductions


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)。例如,这些假设都不适合我。
Arnauld


1

V,36字节

16x3wC AMÇ^0ü^1[0-2]/12WrP
ç^ä:/é0

在线尝试!

十六进制转储:

00000000: 3136 7833 7743 2041 4d1b c75e 30fc 5e31  16x3wC AM..^0.^1
00000010: 5b30 2d32 5d2f 3132 1857 7250 0ae7 5ee4  [0-2]/12.WrP..^.
00000020: 3a2f e930                                :/.0

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');
manatwork '17

1

果冻,43个字节

Ḳ5ịṣ”:Ṗṁ3µV’%12‘Dµ1¦µV>11ị⁾PAµ3¦“0: M”żFṫ-7

在线尝试!

太长了!也就是说,果冻在时间操纵上很烂。

编辑:我什至不满意PHP!





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

我们可以解释一下吗?
totallyhuman

1
@totallyhuman当然,感谢您提醒我。编辑。基本上,内置XO函数可完成大部分工作
Luis Mendo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.