深入理解Java:SimpleDateFormat安全的時間格式化
深入理解Java:SimpleDateFormat安全的時間格式化
想必大家對SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一個非常常用的類,該類用來對日期字符串進行解析和格式化輸出,但如果使用不小心會導致非常微妙和難以調試的問題,因為 DateFormat 和 SimpleDateFormat 類不都是線程安全的,在多線程環境下調用 format() 和 parse() 方法應該使用同步代碼來避免問題。下面我們通過一個具體的場景來一步步的深入學習和理解SimpleDateFormat類。
一.引子我們都是優秀的程序員,我們都知道在程序中我們應當盡量少的創建SimpleDateFormat 實例,因為創建這么一個實例需要耗費很大的代價。在一個讀取數據庫數據導出到excel文件的例子當中,每次處理一個時間信息的時候,就需要創建一個SimpleDateFormat實例對象,然后再丟棄這個對象。大量的對象就這樣被創建出來,占用大量的內存和 jvm空間。代碼如下:
(資料圖)
package com.peidasoft.dateformat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateUtil { public static String formatDate(Date date)throws ParseException{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(date); } public static Date parse(String strDate) throws ParseException{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.parse(strDate); }}
你也許會說,OK,那我就創建一個靜態的simpleDateFormat實例,然后放到一個DateUtil類(如下)中,在使用時直接使用這個實例進行操作,這樣問題就解決了。改進后的代碼如下:
package com.peidasoft.dateformat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateUtil { private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static String formatDate(Date date)throws ParseException{ return sdf.format(date); } public static Date parse(String strDate) throws ParseException{ return sdf.parse(strDate); }}
當然,這個方法的確很不錯,在大部分的時間里面都會工作得很好。但當你在生產環境中使用一段時間之后,你就會發現這么一個事實:它不是線程安全的。在正常的測試情況之下,都沒有問題,但一旦在生產環境中一定負載情況下時,這個問題就出來了。他會出現各種不同的情況,比如轉化的時間不正確,比如報錯,比如線程被掛死等等。我們看下面的測試用例,那事實說話:
package com.peidasoft.dateformat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateUtil { private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static String formatDate(Date date)throws ParseException{ return sdf.format(date); } public static Date parse(String strDate) throws ParseException{ return sdf.parse(strDate); }}
package com.peidasoft.dateformat;import java.text.ParseException;import java.util.Date;public class DateUtilTest { public static class TestSimpleDateFormatThreadSafe extends Thread { @Override public void run() { while(true) { try { this.join(2000); } catch (InterruptedException e1) { e1.printStackTrace(); } try { System.out.println(this.getName()+":"+DateUtil.parse("2013-05-24 06:02:20")); } catch (ParseException e) { e.printStackTrace(); } } } } public static void main(String[] args) { for(int i = 0; i < 3; i++){ new TestSimpleDateFormatThreadSafe().start(); } }}
執行輸出如下:
Exception in thread "Thread-1" java.lang.NumberFormatException: multiple points at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1082) at java.lang.Double.parseDouble(Double.java:510) at java.text.DigitList.getDouble(DigitList.java:151) at java.text.DecimalFormat.parse(DecimalFormat.java:1302) at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1589) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1311) at java.text.DateFormat.parse(DateFormat.java:335) at com.peidasoft.orm.dateformat.DateNoStaticUtil.parse(DateNoStaticUtil.java:17) at com.peidasoft.orm.dateformat.DateUtilTest$TestSimpleDateFormatThreadSafe.run(DateUtilTest.java:20)Exception in thread "Thread-0" java.lang.NumberFormatException: multiple points at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1082) at java.lang.Double.parseDouble(Double.java:510) at java.text.DigitList.getDouble(DigitList.java:151) at java.text.DecimalFormat.parse(DecimalFormat.java:1302) at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1589) at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1311) at java.text.DateFormat.parse(DateFormat.java:335) at com.peidasoft.orm.dateformat.DateNoStaticUtil.parse(DateNoStaticUtil.java:17) at com.peidasoft.orm.dateformat.DateUtilTest$TestSimpleDateFormatThreadSafe.run(DateUtilTest.java:20)Thread-2:Mon May 24 06:02:20 CST 2021Thread-2:Fri May 24 06:02:20 CST 2013Thread-2:Fri May 24 06:02:20 CST 2013Thread-2:Fri May 24 06:02:20 CST 2013
說明:Thread-1和Thread-0報java.lang.NumberFormatException: multiple points錯誤,直接掛死,沒起來;Thread-2 雖然沒有掛死,但輸出的時間是有錯誤的,比如我們輸入的時間是:2013-05-24 06:02:20 ,當會輸出:Mon May 24 06:02:20 CST 2021 這樣的靈異事件。
二.原因
作為一個專業程序員,我們當然都知道,相比于共享一個變量的開銷要比每次創建一個新變量要小很多。上面的優化過的靜態的SimpleDateFormat版,之所在并發情況下回出現各種靈異錯誤,是因為SimpleDateFormat和DateFormat類不是線程安全的。我們之所以忽視線程安全的問題,是因為從SimpleDateFormat和DateFormat類提供給我們的接口上來看,實在讓人看不出它與線程安全有何相干。只是在JDK文檔的最下面有如下說明:
SimpleDateFormat中的日期格式不是同步的。推薦(建議)為每個線程創建獨立的格式實例。如果多個線程同時訪問一個格式,則它必須保持外部同步。
JDK原始文檔如下:
Synchronization:
Date formats are not synchronized.
It is recommended to create separate format instances for each thread.
If multiple threads access a format concurrently, it must be synchronized externally.
下面我們通過看JDK源碼來看看為什么SimpleDateFormat和DateFormat類不是線程安全的真正原因:
SimpleDateFormat繼承了DateFormat,在DateFormat中定義了一個protected屬性的 Calendar類的對象:calendar。只是因為Calendar累的概念復雜,牽扯到時區與本地化等等,Jdk的實現中使用了成員變量來傳遞參數,這就造成在多線程的時候會出現錯誤。
在format方法里,有這樣一段代碼:
private StringBuffer format(Date date, StringBuffer toAppendTo, FieldDelegate delegate) { // Convert input date to time field list calendar.setTime(date); boolean useDateFormatSymbols = useDateFormatSymbols(); for (int i = 0; i < compiledPattern.length; ) { int tag = compiledPattern[i] >>> 8; int count = compiledPattern[i++] & 0xff; if (count == 255) { count = compiledPattern[i++] << 16; count |= compiledPattern[i++]; } switch (tag) { case TAG_QUOTE_ASCII_CHAR: toAppendTo.append((char)count); break; case TAG_QUOTE_CHARS: toAppendTo.append(compiledPattern, i, count); i += count; break; default: subFormat(tag, count, delegate, toAppendTo, useDateFormatSymbols); break; } } return toAppendTo; }
calendar.setTime(date)這條語句改變了calendar,稍后,calendar還會用到(在subFormat方法里),而這就是引發問題的根源。想象一下,在一個多線程環境下,有兩個線程持有了同一個SimpleDateFormat的實例,分別調用format方法:
線程1調用format方法,改變了calendar這個字段。
中斷來了。
線程2開始執行,它也改變了calendar。
又中斷了。
線程1回來了,此時,calendar已然不是它所設的值,而是走上了線程2設計的道路。如果多個線程同時爭搶calendar對象,則會出現各種問題,時間不對,線程掛死等等。
分析一下format的實現,我們不難發現,用到成員變量calendar,唯一的好處,就是在調用subFormat時,少了一個參數,卻帶來了這許多的問題。其實,只要在這里用一個局部變量,一路傳遞下去,所有問題都將迎刃而解。
這個問題背后隱藏著一個更為重要的問題--無狀態:無狀態方法的好處之一,就是它在各種環境下,都可以安全的調用。衡量一個方法是否是有狀態的,就看它是否改動了其它的東西,比如全局變量,比如實例的字段。format方法在運行過程中改動了SimpleDateFormat的calendar字段,所以,它是有狀態的。
這也同時提醒我們在開發和設計系統的時候注意下一下三點:
1.自己寫公用類的時候,要對多線程調用情況下的后果在注釋里進行明確說明
2.對線程環境下,對每一個共享的可變變量都要注意其線程安全性
3.我們的類和方法在做設計的時候,要盡量設計成無狀態的
三.解決辦法
1.需要的時候創建新實例:
package com.peidasoft.dateformat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateUtil { public static String formatDate(Date date)throws ParseException{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(date); } public static Date parse(String strDate) throws ParseException{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.parse(strDate); }}
說明:在需要用到SimpleDateFormat 的地方新建一個實例,不管什么時候,將有線程安全問題的對象由共享變為局部私有都能避免多線程問題,不過也加重了創建對象的負擔。在一般情況下,這樣其實對性能影響比不是很明顯的。
2.使用同步:同步SimpleDateFormat對象
package com.peidasoft.dateformat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateSyncUtil { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static String formatDate(Date date)throws ParseException{ synchronized(sdf){ return sdf.format(date); } } public static Date parse(String strDate) throws ParseException{ synchronized(sdf){ return sdf.parse(strDate); } } }
說明:當線程較多時,當一個線程調用該方法時,其他想要調用此方法的線程就要block,多線程并發量大的時候會對性能有一定的影響。
3.使用ThreadLocal:
package com.peidasoft.dateformat;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class ConcurrentDateUtil { private static ThreadLocalthreadLocal = new ThreadLocal() { @Override protected DateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }; public static Date parse(String dateStr) throws ParseException { return threadLocal.get().parse(dateStr); } public static String format(Date date) { return threadLocal.get().format(date); }}
另外一種寫法:
package com.peidasoft.dateformat;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class ThreadLocalDateUtil { private static final String date_format = "yyyy-MM-dd HH:mm:ss"; private static ThreadLocalthreadLocal = new ThreadLocal(); public static DateFormat getDateFormat() { DateFormat df = threadLocal.get(); if(df==null){ df = new SimpleDateFormat(date_format); threadLocal.set(df); } return df; } public static String formatDate(Date date) throws ParseException { return getDateFormat().format(date); } public static Date parse(String strDate) throws ParseException { return getDateFormat().parse(strDate); } }
說明:使用ThreadLocal, 也是將共享變量變為獨享,線程獨享肯定能比方法獨享在并發環境中能減少不少創建對象的開銷。如果對性能要求比較高的情況下,一般推薦使用這種方法。
4.拋棄JDK,使用其他類庫中的時間格式化類:
1.使用Apache commons 里的FastDateFormat,宣稱是既快又線程安全的SimpleDateFormat, 可惜它只能對日期進行format, 不能對日期串進行解析。
2.使用Joda-Time類庫來處理時間相關問題
做一個簡單的壓力測試,方法一最慢,方法三最快,但是就算是最慢的方法一性能也不差,一般系統方法一和方法二就可以滿足,所以說在這個點很難成為你系統的瓶頸所在。從簡單的角度來說,建議使用方法一或者方法二,如果在必要的時候,追求那么一點性能提升的話,可以考慮用方法三,用ThreadLocal做緩存。
Joda-Time類庫對時間處理方式比較完美,建議使用。
標簽:
相關推薦:
精彩放送:
- []屈子祠簡介_屈子
- []世界資訊:公積金余額1萬能貸款多少
- []【環球熱聞】2022年各大銀行大額存單利率表一覽,五大行利率一覽
- []建行卡開戶行查詢方式
- []1分利是什么意思?
- []最新快訊!TD早報 | 迪士尼CEO承認門票漲價“過于激進”;疫后我國首家境外中國簽證中心開業
- []即時看!貨幣政策與財政政策的區別,有以下四點區別
- []郵政銀行上班時間 郵政銀行營業時間
- []重點聚焦!字節跳動相關概念股票
- []世界微頭條丨全世界經濟排名,世界各國gdp排名一覽
- []余額寶收益率 余額寶的收益率多少
- []今日看點:2022中國通脹率一覽表,2%到3%左右
- []【世界快播報】不止浙商證券 東吳證券也擬參拍34.71億股民生證券股份
- []天天觀點:貴州輪胎:截至2023年3月10日收市后,公司的股東戶數為45,877戶
- []每日聚焦:景瑞控股:達成復牌條件 涉及49.1億存款獨立調查已完成
- []齊界辭去大連萬達商管董事長職務 肖廣瑞獲選接任
- []全球觀熱點:景瑞控股2021年凈利3.94億 獨立核數師指經營存在重大不確定性
- []當前速遞!安徽省技能人才振興計劃實施方案 2014—2017年
- []即時焦點:怎么投資掙錢
- []網上貸款怎么還款,有以下六種方法
- []10轉10股什么意思
- []每日看點!新三板申購規則詳解
- []天天速遞!話費預存款什么意思
- []焦點速遞!浙商證券擬參拍泛??毓伤?4.71億股民生證券股份 起價58.65億
- []焦點觀察:td指標,是德馬克指標
- []訊息:中了可轉債怎么操作,有以下三點
- []【環球熱聞】一般車險多少錢 車險一般多少錢一年
- []環球快播:建設銀行2020年大額存款利率
- []環球微頭條丨金融app有哪些,十大網貸軟件一覽
- []世界速看:恒達集團發盈警 估計2022年權益股東應占溢利將減少65%至80%
- []世界簡訊:金太陽:3月10日公司高管楊偉減持公司股份合計3.41萬股
- []每日聚焦:美聯儲利率掉期預計美聯儲將在年底前降息50個基點
- []長亮科技:3月10日公司高管王長春、魏鋒、徐亞麗、鄭康減持公司股份合計104.75萬股
- []銅牛信息:3月10日公司高管李超成減持公司股份合計4.24萬股
- []三元生物:3月10日公司高管崔振乾減持公司股份合計5.26萬股
- []焦點播報:跌停的股票可以買進嗎 當然可以
- []余額寶最聰明的存錢法
- []交響旗艦走出北京,國家大劇院管弦樂團與上海再相約
- []什么是余額寶理財
- []全球微動態丨持倉限額
- []金融危機如何應對
- []新消息丨華僑城擬調劑對陜西華僑城商業擔保額度 由5億增至10.236億
- []全球球精選!青木股份:公司品牌數字營銷業務涉及在抖音及快手等多個新媒體平臺的投放業務
- []世界微速訊:中南建設為中南建筑2.2億元融資延長一年繼續提供擔保
- []世界速看:繼硅谷銀行后 美國簽名銀行因系統性風險被關閉
- []世界最資訊丨圓通速遞:3月10日林凱增持公司股份合計5000股
- []環球百事通!沃格光電:3月9日公司高管熊偉增持公司股份合計7000股
- []如何查詢股票中簽號碼,有以下三點
- []環球快消息!人民幣為什么一直在貶值,有以下兩種原因
- []直播預告|2023 環球旅訊數智論壇(北京站)直播預約通道正式開啟
- []實時:股票黃色線是什么線
- []指數型基金什么意思
- []天天微速訊:銀行叫號機功能,分以下四點
- []微頭條丨中交地產定增方案獲股東大會審議通過 此前擬募資不超35億元
- []全球消息!飛馬國際:本公司的主要經營業務為環保新能源業務和供應鏈管理服務,未涉及氫能源領域相關業務
- []天天亮點!泛海控股聘任嚴珊明為副總裁 李雋為風控法務總監
- []*ST易尚:公司未參加此次交易會
- []世界今日訊!朗進科技:截止2023年3月10日的公司股東人數是8919人
- []當前短訊!越秀資本上調“20越控01”存續期票面利率至2.95%
- []匠心家居:公司與硅谷銀行無任何業務往來。硅谷銀行在美國的北加州,公司的美國行政與財務中心在南加州
- []全球球精選!新湖中寶擬為控股股東新湖集團提供4.06億元擔保
- []環球視點!因個人工作原因 朱大興辭去三湘印象證券事務代表職務
- []乳鐵蛋白奶粉排行榜前十位?誰才是真正的含量“王”者
- []實時:公司汽車可以抵押貸款嗎,可以
- []【世界新視野】2020年房貸利率是多少
- []全球速看:養老概念十大龍頭股,核心概念龍頭股一覽
- []環球速看:投?;鹄U納比例是什么
- []全球觀速訊丨石墨烯手機概念股票龍頭一覽表,2023石墨烯手機相關上市公司有哪些
- []全球微動態丨新能源車出口強勢增長特征延續,3月車市有望持續升溫
- []全球百事通!"14蘇國資MTN001"將支付本年利息 票面利率6.50%
- []財面兒丨綠地香港1-2月集團合約銷售約人民幣22.28億元 同比增長10.9%
- []每日消息!鄭州建投集團10億元中期票據將付息 利率4.28%
- []ST摩登索賠案一審判決已有投資者勝訴 律師明確可索賠區間
- []今日熱議:即墨旅投6億中期票據將到期兌付 利率4.32%
- []家居丨亞廈股份控股股東亞廈控股質押4300萬股,占總股本3.21%
- []東方雨虹:截至2023年3月10日,公司股東總數為146,253戶
- []招商南油:alalei86,目前公司生產經營情況一切正常
- []天天通訊!邯鄲曲周:研究生團隊進村入戶 宣講黨的二十大精神
- []【獨家焦點】美元加息影響,有以下四點
- []債券資金項目是什么意思
- []如何購買外幣,在相關銀行APP購買
- []螞蟻金服概念股票龍頭一覽表,2023螞蟻金服相關上市公司有哪些
- []隔離保險在哪買,有以下三種方法
- []成都推出12個保租房項目共8200套房源 累計已籌集207個項目
- []通訊!"20中天金融MTN001"完成要素變更 15億元本金兌付延期5年
- []重藥控股:截至2023年3月10日,公司股東總數為44399戶
- []環球快訊:善水科技:公司目前正在進行部分設備安裝及調試工作,公司將積極推動試生產前準備工作,爭取加快進行試生產
- []天天短訊!西安市雁塔區城投集團30億元私募債券項目更新至“已反饋”
- []匯豐回應收購硅谷銀行英國子公司:能加強在英商業銀行特許經營權
- []環球快資訊丨漳州發展:截止2023年3月10日,公司股東人數約為4.9萬戶
- []天天快看:招商積余福建公司中標漳州4個城市公共服務項目
- []環球微頭條丨gdp排名全國2021前十,超過10萬億的有2個
- []長期存錢哪個銀行最好,選擇大銀行存錢最好
- []洞察市場需求,箭牌家居開創創新發展新路徑
- []每日時訊!美國非農數據與黃金的關系
- []全球速讀:沒工作可以貸款嗎,可以
- []全球觀速訊丨人民幣縮水貶值對樓市什么影響
- []解鎖千面生活的秘辛——寧波阪急春日時尚大賞
- []瑞金市城市發展投資集團10億公司債即將付息 票面利率6.80%
- []合肥新鴻安商城爛尾近30年將實施拆遷 采取貨幣補償、產權調換等方案
- B站注冊資本增幅400%至5億 目前由陳睿全資持股
- 光源資本出任獨家財務顧問 沐曦集成電路10億元A輪融資宣告完成
- 巨輪智能2021年上半年營收11.24億元 期內研發費用投入增長19.05%
- 紅棗期貨尾盤拉升大漲近6% 目前紅棗市場總庫存約30萬噸
- 嘉銀金科發布2021年Q2財報 期內凈利潤達1.27億元同比增長208%
- 成都銀行2021上半年凈利33.89億元 期內實現營收同比增長17.27億元
- 汽車之家發布2021年第二季度業績 期內新能源汽車品牌收入增長238%
- 中信銀行上半年實現凈利潤290.31億元 期末不良貸款余額706.82億元
- 光伏概念掀起漲停潮交易價格創新高 全天成交額達1.29億元
- 上半年生物藥大增45% 關鍵財務指標好轉營收賬款持續下降
- 天天觀焦點:惠譽確認新鴻基地產的長期發行人違約評級為「A」
- 全球聚焦:ST國華:公司會結合相關法律法規以及公司實際情況進行綜合考慮
- 【世界聚看點】北京建工擬發行超短期融資券及中票共52億元 用于償還有息負債
- 今日熱議:今日散戶搶籌的50只個股
- 遠興能源:截止2023年3月10日,公司股東人數為93,260戶
- 世界觀速訊丨旺能環境:目前是立鑫項目負責動力電池回收再生,一期的產能是3000金噸的鈷鎳,1000噸的碳酸鋰
- 南京安居建設集團10億公司債即將兌付及摘牌 利率3.85%
- 世界快看點丨今日主力資金流入的前十大板塊
- 箭牌“一起綠”事件,洞察中國品牌江河萬古流
- 全球速看:電信手機充q幣沒用了(電信手機充q幣)
- 今頭條!年輕人帶火賞花游 ,00后排名第三占比兩成
- 天天即時看!工行活期存款利率表2022最新,利率為0.3%
- 【環球新要聞】中國銀行活期利率
- 到底是賬戶還是帳戶
- 全球關注:蘇州園區公積金貸款,簡單五步輕松辦理
- 箭牌衛浴X廣州設計周 | 用智慧去探尋生活可能
- 【環球時快訊】銀行卡維護中是啥意思,銀行系統正在進行升級
- 天天通訊!杭州良渚文化城集團完成發行15億短期融資券 利率3.0%
- 環球熱文:3月13日勤上股份漲停分析:在線教育,智慧城市,智慧燈桿概念熱股
- 拼多多跨境電商Temu計劃3月25日上線英國站點
- 3月13日四川黃金漲停分析
- 青島:推進歷史城區保護更新、5A景區創建和老城區申遺 年度投資28.3億元
- 佛山出臺舉措推進制造業發展 支持企業開展并購實現換道發展
- 杰恩設計:截至2023年3月10日,公司股東總戶數為4,758戶
- 廣西南方鴻基投資所持鴻基物業100%股權將拍賣 起拍價350萬元
- 環球熱文:百度文心一言生態圈再擴大,把握商業化落地投資機會
- 3月13日用友網絡漲停分析:信創,國產軟件,數字經濟概念熱股
- 建行補卡流程,分以下七點
- 中國農業銀行存款利率2022,各類存款利率一覽
- 世界今頭條!酒店代訂,正途還是騙局?
- 全球消息!云南旅游依然火熱,旅行社卻沒賺到錢?
- 今日觀點!留抵退稅什么意思
- 焦點消息!中國銀行兌換外幣流程,有以下四步
- 天天熱門:國債逆回購如何操作及操作技巧
- 全球快訊:榮盛按下復產“加速鍵”,奮力搶工期,全力保交付
- 焦點訊息:一季度凈利最高預增逾兩倍,天合光能“辛苦錢”還能賺多久?
- 天天百事通!「美聯樓價指數」連升9周
- 熱頭條丨貝殼整裝品牌"被窩家裝"總部旗艦店開業 面積擴增至6100㎡
- 天天視訊!廣西2022年住房公積金提取434.64億元 住房消費占78.09%
- 天天關注:國際金價短線或回落至1862美元
- 中科環保:黨的二十大進一步強調,推進以人為核心的新型城鎮化,加快農業轉移人口市民化
- 天天亮點!【BT金融分析師】百度計劃將AI全面整合到業務中,分析師稱其腳踏實地不像西方企業
- 當前要聞:永順泰:公司2022年1-9月財務費用主要由匯兌損益及借款利息支出構成
- 世界速讀:交銀國際信托轉讓大河西城市棚改35.33%股份 湘潭城鄉建設集團接盤
- 全球新消息丨奕東電子:公司按相關規定的時間要求披露年報和季報,具體情況請留意后續披露的定期報告
- 招商銀行金葵花卡條件,有以下兩個條件
- 當前觀點:什么是建行紙黃金
- 凈值估算是什么意思
- 通貨膨脹的影響和后果
- 三維天地助力乳品企業全流程線上智能化管理
- 每日熱聞!雙創50是什么意思
- 焦點要聞:中國移動投訴中心網站_中國移動投訴中心
- 全球熱議:遠洋集團12億公司債將于3月20日到期兌付 利率4.59%
- 環球快資訊丨格力地產:業績增長與房地產回暖有關 重組工作正在抓緊審計評估
- 熱訊:一個月HIBOR連升7日
- 視焦點訊!濟南大明湖悅苑酒店3月12日開業 共配置客房97間
- 天天熱門:一張圖:黃金原油外匯股指"樞紐點+多空占比"一覽(2023/03/13周一)
- 動態:利好黃金!三天內兩家美國銀行倒閉,高盛不再預測美聯儲本月加息
- 今頭條!長纜科技:對220kV/3kA?超導電纜終端系統,公司與相關的科研院所合作,開展了理論研究和前期調研
- 全球快看:中科環保:截至2月28日,公司股東人數為59,625戶
- 環球熱消息:綠地香港首2月合約銷售額約22.28億元 同比增長11%
- 【世界熱聞】平均工資指數怎么算
- 天天觀焦點:股票元旦節休市幾天2023,休市三天
- 全球最資訊丨建行短信服務費 建行短信通知服務費
- 全球視點!網上兼職可靠嗎 網上兼職是真的嗎
- 銀行pos機怎樣收手續費的,各銀行pos機手續費一覽
- 每日快報!蕪湖經開投資完成發行1.1億中期票據 票面利率3.20%
- 全球要聞:安溪城建集團13億元私募債券項目更新至“已受理”
- 世界時訊:“21大連萬達MTN001”于3月13日起進行回售 并上調利率至6.6%
- 越秀資本完成發行10億中期票據 票面利率3.15%
- 當前熱點-創意信息:公司將積極參與國家數字經濟相關建設中,目前數據庫及其他業務情況將在定期報告中披露,煩請關注
- 天天微資訊!南昌江旅都市方舟預計今年年中營業
- 天天時訊:麥捷科技:公司截至3月10日的股東戶數為40,413
- 速看:2021年產假是158天還是98天,大多數地方是158天
- 天天快消息!人民幣升值的影響
- 貢獻毛益率 貢獻毛益利率的計算公式是什么
- 如何快速辦理貸款,有以下兩種方法
- 2023全國合作商賦能大會 暨Topmee桃花面品牌升級發布會圓滿成功
- 全球新動態:怎樣存款利息高,有以下三種方法
- 全球速遞!菲律賓旅游局白艾文:“海島游”2023年在中國市場將最受歡迎
- 快報:樾見西貴 始于天元 北京城建“龍樾系”全新樣板間,煥新四環西貴之地
- 世界熱頭條丨廣州知識城集團完成發行10億短期融資券 票面利率2.6%
- 全球實時:國信期貨早評:就業供需改善疊加避險沖擊,金銀繼續反彈
- 每日關注!2月份鄭州商品住房銷售12583套 同比增長120.31%
- 3月13日匯市觀潮:歐元、英鎊和日元技術分析
- 【天天快播報】盡管擔心利率上升,交易商預計下半年油價達100美元!背后有何驅動因素?
- 通訊!壽光城投投資5億短期融資券將兌付 票面利率6.50%
- 成都:到2025年新能源汽車產業規模突破1500億
- 【新要聞】煌上煌:截至2023年3月10日公司股東人數為43, 537人
- 環球今日訊!格力博:公司未在硅谷銀行有存款
- 天天報道:避險情緒大增!黃金的投資邏輯該怎么看?
- 焦點熱門:中觸媒:公司始終按業務的實際需求,對外匯儲備進行合理管理
- 【世界熱聞】炒股軟件有哪些 有哪些炒股軟件
- 中國車險十大排名,車險公司排名一覽
- 全球速讀:文旅局長們卷“出圈” 當地旅游熱度上漲了沒?
- 焦點日報:一個支付寶可以綁定幾個淘寶
- 世界訊息:今日dnf控偶師怎么快速到11級(dnf控偶師怎么快速升級求高手指教!!!)
- 股市元旦節休市時間表2023,一共三天
- 今日熱搜:一個月接五個團,招聘廣告掛了兩個月還沒招滿,最近導游有多搶手?
- 環球最資訊丨股票跌停意味著什么