C# ASP.NET Core 7 Web API:更改日期时间格式以自定义

问题描述 投票:0回答:1

我想问一下我还能尝试什么?

我正在使用 C# 编写 ASP.NET Core 7 Web API,并且我正在尝试更改数据库中名为

Startdate
(其类型为
DateTime
)的字段以自定义其格式。

该字段的格式是

YYYY-MM-DD HH:mm:ss (CE.)
,当输出到Swagger Json时我得到了
YYYY-MM-DDTHH:mm:ss

我想要的是

YYY/MM/DD HH:mm:ss (ROC.)

我曾尝试在视图模型中将其类型设置为字符串,在实现中,我从 LINQ 获取它,但失败了......

我的视图模型:

public class ABCViewModel 
{
    public DateTime? startDate { get; set; }
}

action方法中的实现:

public async Task<List<ABCViewModel>> RetrieveAllAsync()
{
    List<ABCViewModel> ABC = new List<ABCViewModel>();

    try
    {
        var aa = await dbABC.tableABC
            .Select(st
                => new ABCViewModel
                        {
                            startDate = st.Startdate.Value.ToString()
                        })
            .OrderByDescending(d => d.startDate)
            .ToListAsync();

        return aa;
    }
    catch (Exception ex)
    {
        logger.LogError(ex, "RetrieveAllAsync Error");
    }

    return ABC;
}

控制器:

[Route("api/[controller]")]
[ApiController]
public class ABCController : ControllerBase
{
    private readonly IABC abc;

    public ABCController(IABC abc)
    {
        this.abc = abc;
    }

    // GET: api/<ABCController>
    [HttpGet]
    public async Task<List<ABCViewModel>> GetABC()
    {
        
        var result = await abcService.RetrieveAllAsync();        
        return result;
    }        
}

接口:

public interface IABC
{
    Task<List<ABCViewModel>> RetrieveAllAsync();
}

很抱歉我错误的语法和奇怪的描述,希望我提供的代码可以帮助我描述......

如果还有什么我可以做的,我将不胜感激。

谢谢您的帮助。

我尝试过的:

  1. 更改:

     startDate = st.Startdate.Value.ToString()
    

    (如果使用这个,只能得到CE。:DD-M YY)

    至:

     startDate = (st.Startdate.Value.Year - 1911).ToString() + "/"
        + st.Startdate.Value.Month + "/"
        + st.Startdate.Value.Day + " "
    + st.Startdate.Value.Hour + ":"
    + st.Startdate.Value.Minute + ":"
    + st.Startdate.Value.Second
    

得到:

112/1/1 0:0:0

我想要:

112/01/01 00:00:00

(快了!

2. 添加: 上面

[DisplayFormat(DataFormatString = " {0:yyy/MM/dd HH:mm:ss} ")]
public DateTime? startDate { get; set; }

但什么都没有改变。

3. 添加:

.AsEnumerable()

更改为:

var abc = await dbABC.tableABC
        .OrderByDescending(d => d.startDate)
            .ToListAsync()
        .AsEnumerable()
            .Select(st
                => new ABCViewModel
                        {
                            startDate = st.Startdate.Value.ToString(),
                            
                        });

得到:

AsEnumerable()
只能在
ToList()
使用,
ToListAsync()
不能使用。

4. 我想将我的代码更改为: stackoverflow01

但是因为我的工作有合作者,所以我不能这样做,以免其他人遇到任何问题。

5. 我找到: stackoverflow02

所以我尝试更改控制器上的格式,但也许我失败了,因为我没有足够的能力。

c# api linq datetime-format .net-7.0
1个回答
0
投票

终于发现我的错误了!

仅在 try{} 的操作方法中更改我的实现:

try
{
    var aa = await dbABC.tableABC
        .Select(st
            => new ABCViewModel
                    {
                        startDate = st.Startdate.Value.ToString()
                    })
        .OrderByDescending(d => d.startDate)
        .ToListAsync();

    return aa;
}

try
{
    var aa = await (from st in dbABC.tableABC
                    orderby st.Startdate descending
                    select new DisasterViewModel
                     {
                         startDate = st.Startdate.Value.ToString("yyy/MM/dd HH:mm:ss")
                     }                             
                   ).ToListAsync();

    return aa;
}

一定会成功。

真是没想到! 感谢 @RolandMai 和 @Fildor 的帮助,也许我在 LINQ 上有一点能力......?

© www.soinside.com 2019 - 2024. All rights reserved.