-1

嗨,我正在使用 Salesforce Apex,我的日期为字符串,如下所示。我需要使用 Apex 为其添加天数。

String dateTime = '2017-07-08T23:59:59Z';

如果我添加一天,那么它应该是2017-07-09T23:59:59Z作为字符串。我将如何做到这一点?

谢谢!

4

2 回答 2

1

当心夏令时问题!“addDays”函数不支持 DST,因此如果您在添加天数期间(在具有 DST 的时区)跨过 DST 转换,那么时间将会混乱。

要解决这个问题,首先将日期/时间拆分为单独的日期和时间部分,将日期添加到日期部分,然后在最后重新组合,例如:

DateTime dt = ...;
Integer days = ...;
Date d = dt.date().addDays(days);
Time t = dt.time();
dt = DateTime.newInstance(d, t);

如果您在英国(伦敦)时区工作,以下匿名 Apex 很好地说明了这个问题:

DateTime dt = DateTime.newInstance(2017, 10, 28, 23, 59, 59);
System.debug('Adding days directly: ' + dt.addDays(2));
Date d = dt.date().addDays(2);
Time t = dt.time();
dt = DateTime.newInstance(d, t);
System.debug('Adding days in parts: ' + dt);
于 2017-09-20T13:30:26.990 回答
0

您需要将字符串转换为 DateTime,然后添加天数。之后可以格式化回来

String stringDateTime = '2017-07-08T23:59:59Z';
DateTime dt = DateTime.valueOfGmt(stringDateTime);
DateTime tomorrow = dt.addDays(1);
DateTime nextMonth = dt.addMonths(1);
DateTime anniversary = dt.addYears(1);
String formattedDateTime = dt.format('yyyy-MM-dd\'T\'HH:mm:ss\'Z\'');
于 2017-07-27T16:08:49.130 回答