如何在一个变量中计算月份和年份



所以我目前正在开发一个模拟器,它将年份和月份存储为两个独立的变量,比如:

static double currentYear = 1;
static double currentMonth = 1;

它更新如下:

if(currentMonth == 12){
currentYear++;
currentMonth = 1;
}else{
currentMonth++;
}

我对DecimalFormat类很不熟悉,但我知道可以创建一个显示Year:####,Month:##的输出,但我遇到的问题是,它显然必须每12个月添加一年,而不是像普通数字那样每10个月添加。有没有一种更简单的计算方法,或者我的方法是最简单的?

创建一个自定义类型,以年和月表示您的持续时间。类似这样的东西:

class YearMonthDuration
{
  private int durationInMonths ;
  public int Years  { get { return durationInMonths / 12 ; } }
  public int Months { get { return durationInMonths % 12 ; } }
  public YearMonthDuration( int years , int months )
  {
    this.durationInMonths = years * 12 + months ;
    return ;
  }
  public static explicit operator int( YearMonthDuration instance )
  {
    return instance.Years*100 + instance.Months ;
  }
  public override string ToString()
  {
    return string.Format("Years={0}/Months={1}" , Years , Months ) ;
  }
  public YearMonthDuration AddYears( int years )
  {
    durationInMonths += years*12 ;
    return this ;
  }
  public YearMonthDuration AddMonths( int months )
  {
    durationInMonths += months ;
    return this ;
  }
}

您可以始终使用的时空交易。浪费计算机周期来存储更多数据。以同样的方式,时间存储在许多计算机上-UNIX时间戳,它计算自纪元以来的秒数,然后根据它计算日期,以类似的方式存储月份和年份。只需使用一个整数来存储月份总数,然后在输出时只需使用

"Year: " + floor(totalMonths/12) + " Month: " + ((totalMonths % 12) + 1);

其中%是模运算符(即,根据您选择的语言,可以是mod或类似的运算符),floor只是一个向下舍入到较低整数的函数。

BTW格式是另一个问题,你可以在互联网上查找,有很多指南。

相关内容

  • 没有找到相关文章

最新更新