salesforce addMonths()的問題

如果使用 Salesforce 的 addMonths(1) 方法,將 1月30日1月31日 加一個月,都會得到 2月28日(或 2月29日,如果是閏年)。這是因為 Salesforce 的 addMonths 方法在跨月份時會自動調整日期,確保結果是有效日期。

這可能會導致一些定時任務重復觸發,因為多個日期映射后都是同一個日期。因此更建議用 addDays 方法


示例代碼

Date 對象:
Date jan30 = Date.newInstance(2023, 1, 30); // 非閏年
Date jan31 = Date.newInstance(2023, 1, 31);Date feb30 = jan30.addMonths(1); // 加一個月
Date feb31 = jan31.addMonths(1); // 加一個月System.debug('Jan 30 + 1 month: ' + feb30); // 輸出:2023-02-28
System.debug('Jan 31 + 1 month: ' + feb31); // 輸出:2023-02-28
Datetime 對象:
Datetime jan30Time = Datetime.newInstance(2023, 1, 30, 10, 0, 0);
Datetime jan31Time = Datetime.newInstance(2023, 1, 31, 10, 0, 0);Datetime feb30Time = jan30Time.addMonths(1);
Datetime feb31Time = jan31Time.addMonths(1);System.debug('Jan 30 Datetime + 1 month: ' + feb30Time); // 輸出:2023-02-28 10:00:00
System.debug('Jan 31 Datetime + 1 month: ' + feb31Time); // 輸出:2023-02-28 10:00:00

原因

  1. 跨月份時的日期修正邏輯:

    • addMonths 方法在跨月份時,會確保返回的日期是目標月份的有效日期。
    • 如果目標月份中沒有與源日期相同的日期,例如 2月沒有30日或31日,則日期會調整為該月份的最后一天。
  2. 閏年處理:

    • 如果目標月份是 閏年的2月(2024年2月有29天),則結果會是 2月29日
      Date jan31LeapYear = Date.newInstance(2024, 1, 31);
      Date febLeapYear = jan31LeapYear.addMonths(1);
      System.debug('Jan 31, 2024 + 1 month: ' + febLeapYear); // 輸出:2024-02-29
      

總結

  • 1月30日1月31日 加一個月,結果會是 2月28日2月29日,取決于目標年份是否是閏年。
  • 這種調整是 Salesforce 中的預期行為,確保日期始終有效并符合日歷規則。

如果需要處理特定場景(例如固定加30天而不是按月計算),可以使用 addDays() 方法進一步調整。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64844.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64844.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64844.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3. C語言 數據類型

本章目錄: 前言:C語言中的數據類型分類1. 基本數據類型1.1 整數類型1.2 浮點類型1.3 字符型常量1.4 字符串常量 2. 枚舉類型3. void 類型void類型的使用示例: 4. 類型轉換4.1 隱式類型轉換4.2 顯式類型轉換類型轉換的注意事項 5. 小結 前言&a…

JUnit注解,枚舉

一、JUnit注解(Annotations) JUnit 是 Java 中用于編寫和運行單元測試的框架。JUnit 提供了許多注解,用于控制測試的執行順序、測試生命周期、斷言結果等。以下是一些常用的 JUnit 注解及其作用: 1. Test 用于標記一個方法是測…

富芮坤FR800X系列之軟件開發工具鏈(如IDE、編譯器、調試器等)

文章目錄 一、IDE(集成開發環境)二、編譯器三、調試器四、其他輔助工具五、小結 FR800x系列作為一款低功耗藍牙芯片,其軟件開發工具鏈對于開發者來說至關重要。以下是對FR800x軟件開發工具鏈的詳細介紹,包括IDE(集成開…

數據賦能電商:API如何助力品牌成長

在數字時代,數據已成為電商品牌發展的核心驅動力。API(應用程序編程接口)作為數據交互的橋梁,不僅促進了數據的高效流通,更為電商品牌帶來了前所未有的增長機遇。本文將深入探討API如何助力電商品牌實現數據賦能&#…

「Java 數據結構全面解讀」:從基礎到進階的實戰指南

「Java 數據結構全面解讀」:從基礎到進階的實戰指南 數據結構是程序設計中的核心部分,用于組織和管理數據。Java 提供了豐富的集合框架和工具類,涵蓋了常見的數據結構如數組、鏈表、棧、隊列和樹等。本文將系統性地介紹這些數據結構的概念、…

LeetCode - 初級算法 數組(旋轉數組)

旋轉數組 這篇文章討論如何通過編程實現數組元素的旋轉操作。 免責聲明:本文來源于個人知識與公開資料,僅用于學術交流。 描述 給定一個整數數組 nums,將數組中的元素向右輪轉 k 個位置,其中 k 是非負數。 示例: 輸入: nums = [1,2,3,

c#集合詳解-Dictionary、List、Queue、Stack等

目錄 一,非泛型集合 1,ArrayList (1)創建和初始化ArrayList() (2)常用方法 ①Add(value) ②AddRange(value) ③Insert(index,value) ④Remove(value) ⑤RemoveAt(index) ⑥clear() ⑦Contains(v…

記一次網閘部署經歷

1.在成功獲取某大廠偉思網閘設備,并與客戶就現有網絡架構(包括防火墻與交換機)進行了詳盡的溝通與評估后,我們團隊精心構思并提出了一個創新的實施方案——采用透明網橋模式。這一模式以其獨特的優勢,即無需對客戶現有…

SpringCloud(一)--SpringCloud簡介

一. 引言 ? 在微服務架構日益盛行的今天,Spring Cloud憑借其簡單易用、功能強大的特性,成為了眾多開發者的首選。本文僅為學習所用,聯系侵刪。 二. SpringCloud概述 2.1 定義 ? Spring Cloud是一系列框架的有序集合,它巧妙地…

SQLALchemy如何將SQL語句編譯為特定數據庫方言

最近在一個使用fastapitortoise-orm的項目中,需要將orm的語句編譯成特定數據庫方言,但是查詢了官方文檔及一些資料卻找不到合適的方法論😔,于是乎我就把目光放到了sqlalchemy身上,東找西找給我找著了。話不多說&#x…

廬山派K230學習日記2 MicroPython基礎

MicroPython文檔: https://docs.micropython.org/ MicroPython是編程語言 Python3 的精簡高效實現,語法和 Python3 保持一致,但只實現了 Python 標準庫的一小部分,并且經過優化,適用于物聯網 (IoT)、消費電子和嵌入式…

《計算機組成及匯編語言原理》閱讀筆記:p177-p177

《計算機組成及匯編語言原理》學習第 13 天,p177-p177 總結,總計 1 頁。 一、技術總結 1.real mode A programming model where the program has access to the entire capability of the machine, bypassing security and memory management. Useful…

2000-2020年各省財政一般預算支出面板數據

2000-2020年各省財政一般預算支出面板數據 1、時間:2000-2020年 2、來源:國家統計局 3、指標:年份、省份、地方財政一般預算支出 4、范圍:31省 指標解釋:地方財政一般預算支出?是指地方ZF根據預算安排&#xff0…

python小項目:給復制出來的段落前添加星號

給復制出來的段落前添加星號 最終效果二、實現步驟2.1 編寫python腳本2.2 批處理腳本2.3 運行腳本 三、用到知識3.1 pyperclip 模塊 最終效果 說明:復制四段內容(段落實際不做限制),在windows終端輸入 bulletPointAdder&#xff0…

【LeetCode Hot100 二分查找】搜索插入位置、搜索二維矩陣、搜索旋轉排序數組、尋找兩個正序數組的中位數

二分查找 搜索插入位置搜索二維矩陣在排序數組中查找元素的第一個和最后一個位置尋找旋轉排序數組中的最小值搜索旋轉排序數組尋找兩個正序數組的中位數(hard) 搜索插入位置 給定一個排序數組和一個目標值,在數組中找到目標值,并…

24.Java 新特性擴展(重復注解、類型注解)

一、重復注解 1、基本介紹 自從 JDK 5 引入注解以來,注解的使用開始流行,在各個框架中被廣泛使用 不過注解有一個很大的限制,在同一個地方不能多次使用同一個注解 JDK 8 引入了重復注解的概念 2、具體實現 (1)自…

后端java開發路由接口并部署服務器(四)

一、安裝IntelliJ IDEA,安裝包下載 1、官網下載 2、網盤資源 安裝包下載完成后進行傻瓜式下一步安裝就可以了 打開IntelliJ IDEA,輸入網盤資源文件內容 三、漢化處理 插件搜索chinese,就會找到相應的插件安裝重啟軟件即可 四、新建后端j…

Vue.js 表單驗證實戰:一個簡單的登錄頁面

修改日期備注2025.1.2初版 一、前言 Vue.js 學習第一天——學會一個帶有簡單表單驗證的登錄頁面。通過這個項目,會對 Vue.js 的核心概念有了更深入的理解,加深掌握如何運用 Vue 的一些強大特性來實現動態交互和數據處理。 二、項目的基本結構 首先&a…

MySQL 鎖那些事

Q1 : MySQL有哪些鎖,功能是什么,如何項目中使用?Q2 : 行鎖是如何實現的?什么情況下會使用行鎖?Q3 : 四種事務隔離形式的行鎖有什么不一樣?讀未提交讀提交可重復讀串行 Q4 : MySQL 的讀寫都是怎樣加鎖的?Q5 : 需要注意什么? Q1 : MySQL有哪些鎖,功能是什么,如何項目中使用…

國產文本編輯器EverEdit - 批量轉碼轉換行符

1 批量轉碼&轉換行符 1.1 應用場景 如果用戶批量在Windows編輯文件,要上傳到異構系統,如:Linux,則需要批量轉換編碼和換行符,此時可以使用EverEdit的批量轉碼功能。 1.2 使用方法 選擇主菜單文檔 -> 批量轉碼…