- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个名为 PaymentFrequency
的枚举类型,它的值表示每年支付了多少...所以我有
public enum PaymentFrequency
{
None = 0,
Annually = 1,
SemiAnnually = 2,
EveryFourthMonth = 3,
Quarterly = 4,
BiMonthly = 6,
Monthly = 12,
EveryFourthWeek = 13,
SemiMonthly = 24,
BiWeekly = 26,
Weekly = 52
}
基于 NumberOfPayments
、PaymentFrequency
和 FirstPaymentDate
(DateTimeOffset 类型)我想计算 LastPaymentDate
。但是我无法确定在 SemiMonthly 的情况下要添加多少时间单位(天、月)...
switch (paymentFrequency)
{
// add years...
case PaymentFrequency.Annually:
LastPaymentDate = FirstPaymentDate.AddYears(NumberOfPayments - 1);
break;
// add months...
case PaymentFrequency.SemiAnnually:
LastPaymentDate = FirstPaymentDate.AddMonths((NumberOfPayments - 1) * 6); // 6 months
break;
case PaymentFrequency.EveryFourthMonth:
LastPaymentDate = FirstPaymentDate.AddMonths((NumberOfPayments - 1) * 4); // 4 months
break;
case PaymentFrequency.Quarterly:
LastPaymentDate = FirstPaymentDate.AddMonths((NumberOfPayments - 1) * 3); // 3 months
break;
case PaymentFrequency.BiMonthly:
LastPaymentDate = FirstPaymentDate.AddMonths((NumberOfPayments - 1) * 2); // 2 months
break;
case PaymentFrequency.Monthly:
LastPaymentDate = FirstPaymentDate.AddMonths(NumberOfPayments - 1);
break;
// add days...
case PaymentFrequency.EveryFourthWeek:
LastPaymentDate = FirstPaymentDate.AddDays((NumberOfPayments - 1) * 4 * 7); // 4 weeks (1 week = 7 days)
break;
case PaymentFrequency.SemiMonthly:
// NOTE: how many days in semi month? AddMonths (0.5) does not work :)
LastPaymentDate = FirstPaymentDate.AddMonths((NumberOfPayments - 1) * 0.5); // 2 weeks (1 week = 7 days)
break;
case PaymentFrequency.BiWeekly:
LastPaymentDate = FirstPaymentDate.AddDays((NumberOfPayments - 1) * 2 * 7); // 2 weeks (1 week = 7 days)
break;
case PaymentFrequency.Weekly:
LastPaymentDate = FirstPaymentDate.AddDays((NumberOfPayments - 1) * 7); // 1 week (1 week = 7 days)
break;
case PaymentFrequency.None:
default:
throw new ArgumentException("Payment frequency is not initialized to valid value!", "paymentFrequency");
}
那么,在使用 SemiMonthly 时,我应该使用多少天/月?如果不知道中间每个月的确切天数,这甚至有可能吗?或者这真的很简单,我刚刚喝完咖啡因,只见树木不见森林 :)
最佳答案
对于半月,如果您的第一笔付款也始终是当月的第一笔付款(即,从 1 日到 13 日的任何时间,如评论中所讨论的那样,从 13 日之后开始是有问题的),您可以这样做如下:
// assuming first payment will be 1st of month, add month for every 2 payments
// num payments / 2 (int division, remainder is chucked)
// then add 15 days if this is even payment of the month
LastPaymentDate = FirstPaymentDate.AddMonths((NumberOfPayments - 1) / 2)
.AddDays((NumberOfPayments % 2) == 0 ? 15 : 0);
因此对于第一次付款,这将增加 0 个月和 0 天,因此是第一次付款日期。对于第 2 次付款,这将增加 0 个月(整数除法,剩余部分被剔除)和 16 日的 15 天。对于第 3 次付款,这将增加 1 个月 (1/3) 和下个月 1 日的 0 天,依此类推。
这是假设 FirstPaymentDate 将在某个给定月份的 1 号。如果您想将 16 日作为开始日期等,您可能会从这里看到该去哪里。
有道理吗?
所以为了说明,如果我们有:
DateTime LastPaymentDate, FirstPaymentDate = new DateTime(2011, 12, 5);
for(int numOfPayments=1; numOfPayments<=24; numOfPayments++)
{
LastPaymentDate = FirstPaymentDate.AddMonths((numOfPayments - 1) / 2)
.AddDays((numOfPayments % 2) == 0 ? 15 : 0);
Console.WriteLine(LastPaymentDate);
}
这个循环会给我们:
12/5/2011 12:00:00 AM
12/20/2011 12:00:00 AM
1/5/2012 12:00:00 AM
// etc...
10/20/2012 12:00:00 AM
11/5/2012 12:00:00 AM
11/20/2012 12:00:00 AM
关于c# - "semi-monthly"加多少天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8481517/
我正在处理一些遗留代码,其中 java.util.Calendar 用于与日期相关的计算(基本上是添加月份)。现在我想在代码中用 java.time.LocalDate 替换 java.util.Ca
我刚刚在我正在学习的类(class)中开始使用 R,到目前为止我所做的是制作一个加载文件的脚本。 如果重要的话,我正在使用 Rstudio 1.0.44 使用 Ubuntu 14.04 运行 R。 我
我正在按月查询在 Laravel 中创建的用户,这是我的代码 $devlist = DB::table("users") ->select("id" ,DB::ra
C++20 计时类型/值之间有什么区别 month{7}和 months{7} ?有两个如此相似的名字是不是很困惑? 最佳答案 是的,同时拥有 month 可能会令人困惑。和 months第一次遇到这
我有一个数据库,其中包含我的用户完成的每个操作,并带有时间戳,如下所示: 用户名 ; Action ; 创建日期 我想评估一段时间内活跃用户的数量。我可以看到每周活跃的用户数 (count (dist
我在我的 Python 脚本中使用了 parsedatetime 库,似乎“上个月”有效,“下个月”但“本月”无效。 我错过了什么?有没有办法获取当月的第一天? 编辑:抱歉,这是一些代码: impor
我发现的大部分信息都不在 python>pandas>dataframe 中,因此是这个问题。 我想将 1 到 12 之间的整数转换为缩写的月份名称。 我有一个 df,它看起来像: client
在用户单击“下个月”或“上个月”后,我需要使用自定义 CSS 重新填充日期选择器。我正在点击 onChangeMonthYear 事件,但不知道用户要去哪条路(下个月或上个月)。有什么简单的内置东西可
我正在尝试计算一个月内产品的总销售额,但我希望它包括任何“空”月份(没有销售额)并且只选择最近的 12 个月。 到目前为止,这是我的代码。 declare @ProductNo int set @Pr
我有一个独特的问题,我根本无法解决。 所以我在 SQL Server 2005 中,我得到了以下要处理的数据: FISCAL_YEAR_START_MONTH INT(财政年度的第一个月) COUNT
我正在进行的一个项目需要获取过去 12 个月中每个月的平均发票总额。我可以通过执行 12 个查询(每月 1 个)轻松获得我需要的内容,但它非常丑陋,我最终得到 12 个唯一变量(id 而不是有一个循环
我希望用更好的不太详细的过程替换以下函数,用于从字符串确定数字月份值。有谁知道是否有可用于此目的的日期/日期时间函数?我没有注意到任何一个可以满足我的需求。 代码中的文本字符串正是我接收它们的方式。
我正在尝试获取过去 12 个月(包括当月)按月分组的记录数。不是从今年年初开始。 我有一个表 EVENTS 和一个字段 WODATE。我能做到 aFDQuery.Connection := Tra
我正在使用moment.js在 angularjs 应用程序中进行日期转换。我要打印Month number作为Month name 。我已经尝试过如下, {{item.ReviewMonth | d
我想通过 JPA 从 Oracle 数据库中选择实体,方法如下: Calendar cal = Calendar.getInstance(); cal.setTime(anOtherDate); Qu
我希望用一个更好的更简单的过程来替换以下函数,以便从字符串中确定数字月份值。有谁知道是否有可用于此的 Date/DateTime 函数?我没有注意到可以满足我的需求的。 代码中的文本字符串正是我接收它
我正在尝试获取过去 12 个月(包括当月)按月分组的记录数。不是从今年年初开始。 我有一个表 EVENTS 和一个字段 WODATE。我能做到 aFDQuery.Connection := Tra
我读到“将日期字符串转换为mysql日期时间字段”:但这对我没有帮助 所以我想做的是将dat文件读入mysql中的空表。 table CLIMBED(TRIP_ID int,PEAK VARCHAR(
我有这样的查询: SELECT EXTRACT(MONTH FROM d.mydate) AS synmonth, SUM(apcp) AS apcptot FROM t_synop_data2 d
一些需要更改 df header 的 Django 格式问题。 测试数据: Test_Data = [ ('Year_Month', ['Done_RFQ','Not_
我是一名优秀的程序员,十分优秀!