如何计算c#中的年数和月数? 每个例子:
如果
1. days = 385
然后我需要显示Year= 1.1
(即1年1个月)
2. days= 234
然后我需要显示year =0.7
(即0年7个月)
我们如何计算c#?
我为days=234 /365
做了,结果是0.64(即0年6个月)。但实际上是7个月。
如何获得准确的年份和月份。
答案 0 :(得分:6)
你可以这样做:
double temp = (234.0 /365.0) * 12.0;
int years = (int)temp;
int months = (int)(temp - years);
这是因为你得到0.64,这是0.64岁。如果你想要几个月,你需要乘以12倍。
在上面,你会得到0年零7个月......话虽如此,我不确定你想要如何格式化:
string yearsString = string.Format("{0}.{1}", years, months);
请注意,这将持续11个月3.11,这将是奇怪的,虽然这是你的要求。
另外,如果你想让它非常通用,你可能想用365.25而不是365来代表一个Julian Year,因为它可以帮助你减少因闰年引起的问题。
答案 1 :(得分:2)
如果您不知道实际日期,那么您可以估算:
Number of years: x / 365
Number of months: (x % 365) / 30
其中%是模数
答案 2 :(得分:1)
假设一个月恰好是一年的十二分之一,并且你想要忽略部分月份(基于你的说法,你希望你的例子有7.688个月,那么:
int days = 234;
double years = (double)days / 365.242199;
int wholeYears = (int)Math.Floor(years);
double partYears = years - wholeYears;
double approxMonths = partYears * 12;
string horribleFormat = string.Concat(wholeYears, ".", approxMonths);
答案 3 :(得分:1)
您确定要这种格式吗?结果 - 至少在提供当前信息的情况下 - 将是模糊的,因为几个月是不一致的长度。
考虑几种选择:
仅限年份的表示,例如1.25表示“1和四分之一年”。这不会混合数月和数年,因此一年也很简单,因为一年是365天(闰年除外)。它还消除了歧义,例如“做1.10 == 1.1?”
使用允许您使用强类型日期的具体开始日期。您可以轻松地使用带有日期格式参数的.ToString()
来快速准确地获取结果。
答案 4 :(得分:1)
我们做一些计算。
1 mon = 0.1 2 mon = 0.2 . . 9 mon = 0.9 10 mon = 1.0 [WRONG according to you 1 is a year] fine then 1 / 12 = 0.083, therefore 0.083 is 1 month Now, 234 / 365 = 0.64 => 0.64 / 0.083 => 7.7 i.e. 7th month Therefore fx => days / 365 = ans % 0.083 = result.
我没有时间证明其他数字,但你可以尝试这个公式。
答案 5 :(得分:0)
我的建议是使用DateTime.AddDays:它会为您提供所需的一切。您还可以在那里添加其他时间单位:
DateTime f = new DateTime(0);
var y = f.AddDays(361);
答案 6 :(得分:0)
伪代码
ts= TimeSpan.fromDays(385)
Years = ts.days Modulo 365
months = (ts.days remainder 365) modulo 12
days = (ts.days remainder 365) Remainder 12
answer string years + "." + months + "." + days
答案 7 :(得分:0)
在VB中
Dim d As DateTime = DateTime.MinValue 'year = 0001
d = d.AddYears(DateTime.Now.Year - 1) 'add current year
d = d.AddDays(234) 'add days
Dim yrs As Integer = d.Year - DateTime.Now.Year 'calculate years
Dim mos As Double = d.Month / 12 'calculate months
Dim answer As Double = yrs + mos
回答= .6666666666
答案 8 :(得分:-2)
我认为这在数字上是不可能的。 1年11个月你会做什么? 1.11?因为这可能意味着1年零1个月,或1年11个月。