我有这段代码,当单击按钮时,它将返回当前时间。但是,它以一种非常不可读的格式返回时间。如何格式化以使其看起来更好?
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"}
答案 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();