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

时间:2013-11-19 18:55:44

标签: static decimalformat

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

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

它更新如下:

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

我对DecimalFormat类非常不熟悉,但我知道可以创建一个读取Year:####,Month:##的输出,但我遇到的问题是它必须显然,每12个月增加一年而不是10,就像正常数字一样。 有没有更简单的计算方法,或者我的方式最简单?

2 个答案:

答案 0 :(得分:1)

创建自定义类型以表示您的年和月的持续时间。像这样:

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 ;
  }

}

答案 1 :(得分:0)

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

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

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

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