BalanceString

/**
 * 
 */
package com.hsbc.team.fantasy8.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 34028450
 *
 */
public final class BalanceString {

	private final static long DAY_IN_MILLISEC = 86400000;
	private final static char LEFT_BRACKET = '[';
	private final static char RIGHT_BRACKET = ']';
	private final static char COMMA = ',';
	
	private static SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
	
	private BalanceString() {
		
	}
	
	public static String getBalanceString(String startDateString, String endDateString, Double startDateBalance, Map maturityAmountMap) throws ParseException {
		
		double accumulateBalance = startDateBalance.doubleValue();
		StringBuffer sb = new StringBuffer();
		sb.append(LEFT_BRACKET);
		
		// Convert dates
		Date startDate = sdf.parse(startDateString);
		long startDateTime = startDate.getTime();
		sb.append(LEFT_BRACKET);
		sb.append(startDateTime);
		sb.append(COMMA);
		sb.append(startDateBalance);
		sb.append(RIGHT_BRACKET);
		sb.append(COMMA);
		
		Date endDate = sdf.parse(endDateString);
		long endDateTime =endDate.getTime(); 
		
		// Loop the dates from start date to end date, and accumulate the balance
		for (long i = startDateTime + DAY_IN_MILLISEC; i <= endDateTime; i = i + DAY_IN_MILLISEC) {
			Date tmpDate = new Date(i);
			String tmpDateString = sdf.format(tmpDate);
			if (maturityAmountMap.containsKey(tmpDateString)) {
				Double matureAmount = maturityAmountMap.get(tmpDateString);
				accumulateBalance = accumulateBalance + matureAmount; 
			}
			
			// Construct the String
			sb.append(LEFT_BRACKET);
			sb.append(tmpDate.getTime());
			sb.append(COMMA);
			sb.append(accumulateBalance);
			sb.append(RIGHT_BRACKET);
			
			if (i != endDateTime) {
				sb.append(COMMA);
			}
		}
		sb.append(RIGHT_BRACKET);
		
		
		return sb.toString();
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		String startDateString = "08/01/2012";
		String endDateString = "9/08/2012";
		Double startDateBalance = new Double("160.3423324324325");

		// Dummy data
		java.util.Random randomGen = new java.util.Random();
		Map maturityAmountMap = new HashMap(1000);
		
		Date dummyDate = null;
		try {
			dummyDate = sdf.parse("08/01/2010");
		} catch (ParseException e1) {
			e1.printStackTrace();
		}
		long dummyDateTime = dummyDate.getTime();
		
		for (long i = dummyDateTime + DAY_IN_MILLISEC; i <= dummyDateTime + 1000 * DAY_IN_MILLISEC; i = i + DAY_IN_MILLISEC) {
			Date tmpDate = new Date(i);
			String dateString = sdf.format(tmpDate);
			
			Double amountTmp = new Double(randomGen.nextDouble()*1000);
			
			maturityAmountMap.put(dateString, amountTmp);
			System.out.println(tmpDate + " : " + amountTmp);
		}
		
		try {
			String s = getBalanceString(startDateString, endDateString, startDateBalance, maturityAmountMap);
			System.out.println(s);
		} catch (ParseException e) {
			e.printStackTrace();
		}

	}

}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

Back to Top