首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >识别字符串值是中的日期或DateTime字段

识别字符串值是中的日期或DateTime字段
EN

Stack Overflow用户
提问于 2018-01-03 16:16:16
回答 2查看 4.1K关注 0票数 0

从事销售力量的工作。我有Transaction-1和Transaction-2对象,它们与Case对象有着详细的关系。动态查询正在创建,它在数据库上执行,结果如下所示。

这是案例的样本结果:

({Id=500c000000B1LYCAA3,CaseNumber_c=RPQ-00001231,CreatedById=005c000UUUU,LastModifiedDate=2018-01-02 12:56:03,LastModifiedById=005c000UUUU,OwnerId=005c000UUUU,Category__c=Payment,SubCategory__c=Chase Paymentech,Origin=Email,CreatedDate=2018-01-01 15:22:14,Status=Pending,ContactId=003c000})

我需要根据登录用户区域设置的所有日期和DateTime字段的格式。主要是-嗯-是的。

代码语言:javascript
复制
List<Sobject> s = Database.query(queryStr);

S有以上所有的结果。如何识别所有日期和DateTime字段?我是否需要迭代它并使用RegEx来识别日期或日期/时间字段?

EN

回答 2

Stack Overflow用户

发布于 2018-01-03 18:51:07

我尝试了如下所示,从链接中获取一个参考:getmap.htm

代码语言:javascript
复制
Map<String, Object> finalMap = new Map<String, Object>();
List<Case> mylist = new List<Case>();
Map<String, Object> fieldsToValue = myCase.getPopulatedFieldsAsMap();
for(String fieldName : fieldsToValue.keySet()){
    if(fieldsToValue.get(fieldName) instanceOf Date){
        Date dateValue = Date.valueOf(fieldsToValue.get(fieldName));
        finalMap.put(fieldName, DateTime.newInstance(dateValue.year(), dateValue.month(), dateValue.day()).format());
    }else if(fieldsToValue.get(fieldName) instanceOf DateTime){
        Date dateValue = Date.valueOf(fieldsToValue.get(fieldName));
        finalMap.put(fieldName, DateTime.newInstance(dateValue.year(), dateValue.month(), dateValue.day()).format());
    }else{
        finalMap.put(fieldName, fieldsToValue.get(fieldName));
    }
}

如何将Map finalMap转换回SObject?

票数 0
EN

Stack Overflow用户

发布于 2018-01-05 22:35:41

您是如何创建动态查询的?如果您使用“描述”调用来学习所有字段的名称,那么您就不远了。

还请记住,仅仅因为查询是动态的,这并不意味着您必须将结果存储在List<sObject>中。将其转换为Cases是非常好的,然后使用它们变得非常容易(如果您要在VF页面上使用结果,它应该为您处理日期格式!)List<Case> records = Database.query('SELECT Subject FROM Case LIMIT 10');应该会没事的。

但是,如果你真的必须这样做,让我们尝试手动完成它。我将阅读联系人上的所有字段(在开发版中我没有任何日期字段),并检查如何格式化它们。

代码语言:javascript
复制
Map<String, Schema.SObjectField> fieldMap = Schema.SObjectType.Contact.fields.getMap();

Set<String> dateFields = new Set<String>();
Set<String> dateTimeFields = new Set<String>();

List<String> allFields = new List<String>(fieldMap.keyset());
allFields.sort();
System.debug(allFields);

for(String key : fieldMap.keyset()){
    Schema.DescribeFieldResult dfr = fieldMap.get(key).getDescribe();
    Schema.DisplayType t = dfr.getType();
    if(t == DisplayType.Date){
        dateFields.add(key);
    } else if(t == DisplayType.DateTime){
        dateTimeFields.add(key);
    }
}
System.debug('Date: ' + dateFields);
System.debug('DateTime: ' + dateTimeFields);

String query = String.join(new List<String>{
    'SELECT ' + String.join(allFields, ','),
    'FROM Contact',
    'LIMIT 10'
}, '\n');

List<Contact> contacts = (List<Contact>) Database.query(query);
for(Contact c : contacts){
    System.debug(c);
    for(String field : dateFields){
        String value = c.get(field) == null ? '(empty)' : ((Date) c.get(field)).format();
        System.debug(field + ': ' + value);
    }
    for(String field : dateTimeFields){
        String value = c.get(field) == null ? '(empty)' : ((DateTime) c.get(field)).format();
        System.debug(field + ': ' + value);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48081145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档