如何在Salesforce Apex中添加日期时间?

如何在Salesforce Apex中添加日期时间?,salesforce,visualforce,apex,sfdc,Salesforce,Visualforce,Apex,Sfdc,嗨,我正在使用Salesforce Apex, 我有一个日期字符串如下。我需要使用Apex为其添加天数 String dateTime = '2017-07-08T23:59:59Z'; 如果我加上一天,那么它应该是2017-07-09T23:59:59Z字符串。我该怎么做 谢谢 您需要将字符串转换为日期时间,然后添加天数。之后可以重新格式化 String stringDateTime = '2017-07-08T23:59:59Z'; DateTime dt = DateTime.value

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

String dateTime = '2017-07-08T23:59:59Z';
如果我加上一天,那么它应该是2017-07-09T23:59:59Z字符串。我该怎么做


谢谢

您需要将字符串转换为日期时间,然后添加天数。之后可以重新格式化

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\'');
当心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);