深入理解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股什么意思
- []每日看点!新三板申购规则详解
- []天天速递!话费预存款什么意思
- []焦点速递!浙商证券拟参拍泛海控股所持34.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年房贷利率是多少
- []全球速看:养老概念十大龙头股,核心概念龙头股一览
- []环球速看:投保基金缴纳比例是什么
- []全球观速讯丨石墨烯手机概念股票龙头一览表,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,一共三天
- 今日热搜:一个月接五个团,招聘广告挂了两个月还没招满,最近导游有多抢手?
- 环球最资讯丨股票跌停意味着什么