英文:
Error: System.ArgumentOutOfRangeException: 'Year, Month, and Day parameters describe an un-representable DateTime.'
问题
以下是您要翻译的内容:
"Can someone help me?
My algorithm should be this:
(Note: I used DateEdit from DevExpress not DateTimePicker)
This is my output
OBTAForTheMonthDateEdit - DateEdit1
OBTADeadlineDateEdit - DateEdit2 (disable for display use only)
LiquidationDeadlineDateEdit - DateEdit3 (disable for display use only)
Example: OBTAForTheMonthDateEdit the selected date is = 12/1/2022 (you can choose any day it doesn't matter)
Display: OBTADeadlineDateEdit = 11/18/2022 (should be the 18th day of the month and before the month you chose.)
LiquidationDeadlineDateEdit = 1/5/2023 (should be the 5th day of the month and after the month you chose.)
I used this code but error: System.ArgumentOutOfRangeException: 'Year, Month, and Day parameters describe an un-representable DateTime.'
Private Sub OBTAForTheMonthDateEdit_TextChanged(sender As Object, e As EventArgs) Handles OBTAForTheMonthDateEdit.TextChanged
Dim dt As Date = OBTAForTheMonthDateEdit.EditValue
OBTADeadlineDateEdit.Text = New DateTime(dt.Year, dt.Month - 1, 18)
LiquidationDeadlineDateEdit.Text = New DateTime(dt.Year, dt.Month + 1, 5)
End Sub
Please help me regarding for this matter. thank you so much!"
英文:
Can someone help me?
My algorithm should be this:
(Note: I used DateEdit from DevExpress not DateTimePicker)
This is my output
OBTAForTheMonthDateEdit - DateEdit1
OBTADeadlineDateEdit - DateEdit2 (disable for display use only)
LiquidationDeadlineDateEdit - DateEdit3 (disable for display use only)
Example: OBTAForTheMonthDateEdit the selected date is = 12/1/2022 (you can choose any day it doesn't matter)
Display: OBTADeadlineDateEdit = 11/18/2022 (should be the 18th day of the month and before the month you chose.)
LiquidationDeadlineDateEdit = 1/5/2023 (should be the 5th day of the month and after the month you chose.)
I used this code but error: System.ArgumentOutOfRangeException: 'Year, Month, and Day parameters describe an un-representable DateTime.'
Private Sub OBTAForTheMonthDateEdit_TextChanged(sender As Object, e As EventArgs) Handles OBTAForTheMonthDateEdit.TextChanged
Dim dt As Date = OBTAForTheMonthDateEdit.EditValue
OBTADeadlineDateEdit.Text = New DateTime(dt.Year, dt.Month - 1, 18)
LiquidationDeadlineDateEdit.Text = New DateTime(dt.Year, dt.Month + 1, 5)
End Sub
Please help me regarding for this matter. thank you so much!
答案1
得分: 1
例子:OBTAForTheMonthDateEdit所选择的日期是=2022年12月1日
如果是这样,你认为dt.Month - 1
的值会是多少?它将为零。零是一个有效的月份吗?不是的,所以这就是你的问题。与其从月份值中添加或减去,然后构造日期,你应该首先构造日期,然后再添加或减去一个月:
OBTADeadlineDateEdit.Text = New DateTime(dt.Year, dt.Month, 18).AddMonths(-1)
LiquidationDeadlineDateEdit.Text = New DateTime(dt.Year, dt.Month, 5).AddMonths(1)
编辑:
我意识到指定的输入是美国格式,在这种情况下,它表示的是12月1日,而不是1月12日。但问题基本上是一样的。这只是意味着问题是加法产生13,而不是减法产生零。解决方案仍然是相同的,即首先构造Date
值,然后添加或减去一个月。我像这样测试了我的解决方案:
Dim dt = #12/1/2022#
Dim dt1 = New Date(dt.Year, dt.Month, 18).AddMonths(-1)
Dim dt2 = New Date(dt.Year, dt.Month, 5).AddMonths(1)
Console.WriteLine(dt1.ToLongDateString())
Console.WriteLine(dt2.ToLongDateString())
输出是:
星期五,2022年11月18日
星期四,2023年1月5日
正如你所期望的那样。
英文:
> Example: OBTAForTheMonthDateEdit the selected date is = 12/1/2022
If that's true then what do you think the value of dt.Month - 1
will be? It will be zero. Is zero a valid month? No it is not, so that's your problem. Rather than adding or subtracting from the month value and then constructing a date, you should be constructing the date first, then adding or subtracting a month:
OBTADeadlineDateEdit.Text = New DateTime(dt.Year, dt.Month, 18).AddMonths(-1)
LiquidationDeadlineDateEdit.Text = New DateTime(dt.Year, dt.Month, 5).AddMonths(1)
EDIT:
I realised that the specified input was in US format, in which case it represents December 1st rather than January 12th. The issue is still basically the same though. It just means that the specific issue is the addition producing 13 rather than the subtraction producing zero. The solution is still the same, i.e. construct the Date
value first, then add or subtract a month. I tested my solution like this:
Dim dt = #12/1/2022#
Dim dt1 = New Date(dt.Year, dt.Month, 18).AddMonths(-1)
Dim dt2 = New Date(dt.Year, dt.Month, 5).AddMonths(1)
Console.WriteLine(dt1.ToLongDateString())
Console.WriteLine(dt2.ToLongDateString())
and the output was:
<pre>
Friday, 18 November 2022
Thursday, 5 January 2023
</pre>
exactly as you'd expect.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论