您好我正在使用Salesforce Apex, 我的日期为String,如下所示。我需要使用Apex添加天数。
String dateTime = '2017-07-08T23:59:59Z';
如果我添加一天,那么它应该是 2017-07-09T23:59:59Z 作为字符串。我该怎么做?
谢谢!
答案 0 :(得分: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\'');
答案 1 :(得分:0)
小心DST问题! " 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);