所以我目前正在开发一个模拟器,它将年份和月份存储为两个独立的变量,比如:
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格式是另一个问题,你可以在互联网上查找,有很多指南。