根据朱利安日历计算月份

calculation of month as per Julian Calendar

本文关键字:计算 日历 朱利安      更新时间:2023-10-16

我是QT C 的初学者,我试图在label_j上打印Julian Day,尊重数组列表中提到的值。我无法做到。请您看到并纠正它。非常感谢。

本月是从UTC获取的 如果一个月相等,则打印0, 一个月相等,然后打印31, 一个月相等的三月,然后打印59,依此类推,直到达到12月为止。

void MainWindow::getJulianDay()

{

  int month_arr[]={0,31,59,90,120,151,181,212,243,273,304,334};
  QString January, February, March, April, May, June, July, August, September, October, November, December;
  QDateTime local(QDateTime::currentDateTimeUtc());
QDateTime UTC(local.toUTC());
QString month=UTC.toString("MMMM");

switch (month)
{
    case January:
        month=month_arr[0];
        break;
    case February:
         month=month_arr[1];
        break;
    case March:
        month=month_arr[2];
        break;
    case April:
        month=month_arr[3];
        break;
    case May:
        month=month_arr[4];
        break;
    case June:
        month=month_arr[5];
        break;
    case July:
        month=month_arr[6];
        break;
    case August:
        month=month_arr[7];
        break;
    case September:
        month=month_arr[8];
        break;
    case October:
        month=month_arr[9];
        break;
    case November:
        month=month_arr[10];
        break;
    case December:
        month=month_arr[11];
        break;
    default: month=invalid;
    break;
    ui->label_j->setText(month);

}

我看到了两个主要错误:

首先,您的case语句条件为空。您应该这样做:

switch(variable) {
    case condition1:
        ...
        break;
    case condition2:
        ...
        break;
    ...
    default:
        ...
        break;
}

所以,您的代码变为:

switch (month);
{
    case 1: 
        month="January";
        answer=month_arr[0];
        break;
    case 2: 
        month="February";
        answer=month_arr[1];
        break;
    ...
    default: 
        month="invalid";
        break;
}

第二个主要问题是ui->label_j->setText(answer);应该超出switch循环。目前,此语句将永远不会执行。

编辑:正如M7913D注意的那样,您有很多类型错误。查看变量的类型!