基础回顾,Date时间类.Collection集合

本文详细介绍了Java中Date和SimpleDateFormat类的使用方法,包括构造方法、常用方法及异常处理,帮助读者掌握如何进行日期时间的格式化和解析。

Date :时间日期类
Date类构造方法方法名说明:
public Date() 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
public Date(long date)分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
Date类常用方法常用方法方法名说明:
public long getTime() 获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
public void setTime(long time) 设置时间,给的是毫秒值
SimpleDateFormat类:
SimpleDateFormat类概述: SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。
SimpleDateFormat类的常用方法 :
格式化(从Date到String)public final String format(Date date):将日期格式化成日期/时间字符串解析
(从String到Date)public Date parse(String source):从给定字符串的开始解析文本以生成日期

异常处理: try-catch方式处理异常(应用)定义格式 :
try { 可能出现异常的代码;} catch(异常类名 变量名) { 异常的处理代码;}

我在自定义sharding分片算法,请基于这个算法构造完整测试用例: import com.google.common.collect.Lists; import com.google.common.collect.Range; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue; import org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue; import org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm; import org.apache.shardingsphere.sharding.spi.ShardingAlgorithm; import org.springframework.stereotype.Component; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.Locale; import java.util.Properties; /** * 自定义分片策略 * * @since 2025-08-18 */ @Slf4j @NoArgsConstructor @Component public class SalesDateShardingAlgorithm implements StandardShardingAlgorithm<String>, ShardingAlgorithm { private Properties properties; private static final String SEPERATOR = "-"; private static final String NOTABLE = "_NOT_EXIST"; private static final String TABLE_SDF = "%s_%s%s"; @Override public String doSharding(Collection<String> collection, PreciseShardingValue<String> preciseShardingValue) { String loginTableName = preciseShardingValue.getLogicTableName(); String date = preciseShardingValue.getValue(); if (log.isDebugEnabled()) { log.info(", sharding {} ", date); } String[] items = date.split(SEPERATOR, -1); if (collection.contains(StringUtils.lowerCase(String.format(TABLE_SDF, loginTableName, items[0], items[1])))) { return String.format(TABLE_SDF, loginTableName, items[0], items[1]); } return loginTableName + NOTABLE; } @Override public Collection<String> doSharding(Collection<String> availableTables, RangeShardingValue<String> rangeShardingValue) { Collection<String> tableList = Lists.newLinkedList(); String logicTableName = rangeShardingValue.getLogicTableName().toLowerCase(Locale.ROOT); Range<String> dates = rangeShardingValue.getValueRange(); try { if (log.isDebugEnabled()) { log.info("tableName : {}, begin : {} end : {}", logicTableName, dates.lowerEndpoint(), dates.upperEndpoint()); } // 动态计算日期范围 Date start = DateUtils.parseDate(dates.lowerEndpoint(), "yyyy-MM-dd HH:mm:ss"); Date end = DateUtils.parseDate(dates.upperEndpoint(), "yyyy-MM-dd HH:mm:ss"); Calendar cal = Calendar.getInstance(); cal.setTime(start); while (cal.getTime().compareTo(end) == 0 || cal.getTime().before(end)) { String month = cal.get(Calendar.YEAR) + String.format("%02d", cal.get(Calendar.MONTH) + 1); String table = String.format(TABLE_SDF, logicTableName, month.substring(0, 4), month.substring(4)); if (availableTables.contains(table)) { tableList.add(table); } else { tableList.add(logicTableName + NOTABLE); } cal.add(Calendar.MONTH, 1); } } catch (Exception e) { log.error("doSharding error", e); throw new BffException(e.getMessage()); } if (log.isDebugEnabled()) { log.info("res : {}", tableList); } return tableList; } @Override public Properties getProps() { return properties; } @Override public void init(Properties properties) { this.properties = properties; } public String getType() { return "SalesDateShardingAlgorithm"; } }
09-02
“// 1. 导入点数据和ROI区域 var samplePoints = ee.FeatureCollection("projects/ee-yixuwei610/assets/2024HBsamples"); var roi = ee.FeatureCollection('projects/ee-yixuwei610/assets/hubei'); var roiGeometry = roi.geometry(); // 2. 加载Landsat 8地表反射率数据 var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') .filterDate('2023-01-01', '2024-12-01') .filterBounds(roiGeometry); // 3. 缩放因子校正函数 function applyScaleFactors(image) { var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2); return image.addBands(opticalBands, null, true); } dataset = dataset.map(applyScaleFactors); // 4. 计算NDVI函数 function addNDVI(image) { var ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI'); return image.addBands(ndvi); } var withNDVI = dataset.map(addNDVI).select('NDVI'); // 5. 创建月度合成影像集合(关键修改) var monthlyCollection = ee.ImageCollection( withNDVI.map(function(image) { return image.set({ 'year': image.date().get('year'), 'month': image.date().get('month'), 'date': image.date().format('YYYY-MM') }); }) .filterDate('2023-01-01', '2024-12-31') ); // 6. 月度中值合成(引用[1][3]方法) var monthlyMedian = monthlyCollection.reduce(ee.Reducer.median().forEachBand(monthlyCollection.first().bandNames())) .rename('NDVI'); // 确保重命名为NDVI // 7. 点采样(高效方法) var sampledPoints = monthlyMedian.sampleRegions({ collection: samplePoints, properties: ['name', 'landcover'], // 保留原始属性 scale: 30, tileScale: 8, geometries: true }); // 8. 添加时间属性 var datedFeatures = sampledPoints.map(function(feature) { var year = feature.get('year'); var month = ee.Number(feature.get('month')).format('%02d'); return feature.set('date', year.cat('-').cat(month)); }); // 9. 导出月度NDVI数据 Export.table.toDrive({ collection: datedFeatures, description: 'Monthly_NDVI_Export', fileFormat: 'CSV', selectors: ['name', 'landcover', 'date', 'NDVI'] }); // 10. 时间序列可视化 var monthlyChart = ui.Chart.image.series({ imageCollection: monthlyMedian, region: samplePoints, reducer: ee.Reducer.mean(), scale: 30 }).setOptions({ title: "月度NDVI时间序列", hAxis: {title: "日期"}, vAxis: {title: "NDVI"}, lineWidth: 2 }); print("月度NDVI时间序列图", monthlyChart); // 11. 地图显示 Map.addLayer(roiGeometry, {color: 'FF0000'}, '湖北'); Map.addLayer(samplePoints, {color: '0000FF'}, '农田点'); Map.centerObject(roiGeometry, 8); ”报错“Line 56: (intermediate value).cat is not a function”
最新发布
09-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值