返回格式正确的时间

时间:2018-08-19 15:59:25

标签: c# asp.net-core

我有这段代码,当单击按钮时,它将返回当前时间。但是,它以一种非常不可读的格式返回时间。如何格式化以使其看起来更好?

using System;
using Microsoft.AspNetCore.Mvc;
using Clockwork.API.Models;

namespace Clockwork.API.Controllers
{
[Route("api/[controller]")]
public class CurrentTimeController : Controller
{
    // GET api/currenttime
    [HttpGet]
    public IActionResult Get()
    {
        var utcTime = DateTime.UtcNow;
        var serverTime = DateTime.Now;
        var ip = this.HttpContext.Connection.RemoteIpAddress.ToString();

        var returnVal = new CurrentTimeQuery
        {
            UTCTime = utcTime,
            ClientIp = ip,
            Time = serverTime
        };

        using (var db = new ClockworkContext())
        {
            db.CurrentTimeQueries.Add(returnVal);
            var count = db.SaveChanges();
            Console.WriteLine("{0} records saved to database", count);

            Console.WriteLine();
            foreach (var CurrentTimeQuery in db.CurrentTimeQueries)
            {
                Console.WriteLine(" - {0}", CurrentTimeQuery.UTCTime);
            }
        }

        return Ok(returnVal);
    }
}
}

它返回如下:

 {"currentTimeQueryId":15,"time":"2018-08-19T11:44:54.3348267-04:00","clientIp":"127.0.0.1","utcTime":"2018-08-19T15:44:54.3348267Z"}

2 个答案:

答案 0 :(得分:2)

您根本不应该尝试更改它。

这是ISO-8601格式的日期和时间,包括UTC偏移量。很好-可以轻松解析几乎所有系统。它是明确的,并且没有任何特定于文化的详细信息,例如日期和月份名称。太好了-供机器阅读。

您正在生成JSON,该JSON应该是机器可读的,而不是 human 可读的。当然,作为一种交换格式,它 可读性很强,但并不打算显示给最终用户。取而代之的是,无论将数据呈现给最终用户如何,都应执行适用于日期/时间值的任何格式。尝试以机器专用的数据传输格式(在这种情况下为JSON)做到这一点非常重要,因为这通常会导致歧义或毫无意义的文化敏感性。

请注意,这不仅适用于日期和时间。以一个数值为例:虽然10.5对您来说可能是“人类可读的”,但法国人并不希望看到“ 10个半”。他们会将其格式化为“ 10,5”。但我不建议在JSON中使用该字符串:我将其设置为10.5(作为数字,而不是字符串 1 ),然后执行“数字转换为人类可读的格式”用Java语言编写。

基本上,在整个数据管道中,始终保持与表示无关的数据,直到到达表示层为止。表示层应具有为实际用户理想地格式化所需的所有文化信息。很多时候,您不会在管道中的其他地方拥有所有这些文化信息。


1 除非您试图表示严格的十进制数,否则除非您试图将JSON视为二进制浮点。不幸的是,JSON中没有真正的十进制格式。

答案 1 :(得分:-1)

您可以尝试

DateTime.Now.ToShortTimeString();