package com.dgex.offspring.config;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.Date;
public class Formatter {
/*
* This is how NXT creates transaction & block timestamps.
*
* Calendar calendar = Calendar.getInstance();
* calendar.set(Calendar.ZONE_OFFSET, 0);
* calendar.set(Calendar.YEAR, 2013);
* calendar.set(Calendar.MONTH, Calendar.NOVEMBER);
* calendar.set(Calendar.DAY_OF_MONTH, 24);
* calendar.set(Calendar.HOUR_OF_DAY, 12);
* calendar.set(Calendar.MINUTE, 0);
* calendar.set(Calendar.SECOND, 0);
* calendar.set(Calendar.MILLISECOND, 0);
* epochBeginning = calendar.getTimeInMillis();
*
* static int getEpochTime(long time) {
* return (int)((time - epochBeginning + 500) / 1000);
* }
*
* Transaction.timestamp = getEpochTime(System.currentTimeMillis());
*
* NXT web interface translates timestamp like this.
*
* function formatTimestamp(timestamp) {
* return (new Date(Date.UTC(2013, 10, 24, 12, 0, 0, 0) + timestamp * 1000)).toLocaleString();
* }
*
* The way NRS translates the timestamp is actually wrong!
* Since they dont include the 500 milliseconds that where added in getEpochTime function.
*
* What should be done is this ...
*
* int timestamp = Transaction.timestamp;
* Date date = new Date((epochBeginning - 500) * 1000)
*
*/
private static long epochBeginning = 0l;
private static long getEpochBeginning() {
if (epochBeginning == 0l) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.ZONE_OFFSET, 0);
calendar.set(Calendar.YEAR, 2013);
calendar.set(Calendar.MONTH, Calendar.NOVEMBER);
calendar.set(Calendar.DAY_OF_MONTH, 24);
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
epochBeginning = calendar.getTimeInMillis();
}
return epochBeginning;
}
public static Date formatTimestamp(Long timestamp) {
return new Date((getEpochBeginning() - 500) + timestamp * 1000);
}
public static String formatTimestampLocale(Long timestamp) {
Date date = formatTimestamp(timestamp);
DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.SHORT);
DateFormat timeFormatter = DateFormat.getTimeInstance(DateFormat.DEFAULT);
return dateFormatter.format(date) + " " + timeFormatter.format(date);
}
/*
function formatAmount(amount) {
var digits=[], formattedAmount = "", i, cents = amount % 100;
amount = Math.floor(amount / 100);
do {
digits[digits.length] = amount % 10;
amount = Math.floor(amount / 10);
} while (amount > 0);
for (i = 0; i < digits.length; i++) {
if (i > 0 && i % 3 == 0) {
formattedAmount = "'" + formattedAmount;
}
formattedAmount = digits[i] + formattedAmount;
}
return formattedAmount + "<span class='cents'>." + Math.floor(cents / 10) + "" + cents % 10 + "</span>";
}
*/
public static Double formatAmount(Long amount) {
return (double) 0;
}
public static String formatBaseTarget(Long target) {
if (target >= 100000) {
return new Long(Math.round(target / 1000)).toString();
}
else if (target >= 10000) {
return new Long(Math.round(target / 100) / 10).toString();
}
else if (target >= 1000) {
return new Long(Math.round(target / 10) / 100).toString();
}
return new Long(target / 1000).toString();
}
public static String readableFileSize(long size) {
if (size <= 0)
return "0";
final String[] units = new String[] {
"B", "KB", "MB", "GB", "TB"
};
int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
}