Java日期转换SimpleDateFormat格式大全
24小时制时间显示:
public class Datetime {
public static void main(String args[]){
java.util.Date current=new java.util.Date();
java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String c=sdf.format(current);
System.out.println(c);
}
}
12小时制时间显示:
public class Datetime {
public static void main(String args[]){
java.util.Date current=new java.util.Date();
java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
String c=sdf.format(current);
System.out.println(c);
}
}
两者区别:yyyy-MM-dd HH:mm:ss ; yyyy-MM-dd hh:mm:ss
如下:
字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y 年 Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
ChartDirector图表组件使用心得
这两天致力于chartDirector画图,所以写一下心得。
从单纯的画图从jfreechart到chartDirector确实进了很大一步,代码简单易用,各语言版的API一致,这样很方便大家移植,下面我主要说一下java版和asp版的破解,和中文问题。
首先我们从官网下载win版的安装包,和jar包:
http://www.advsofteng.com/download_v4.html
由于最新版5.0目前还没有找到破解方法,所以现在实用4版本的比较多。
首先看一下java版的代码:
- double[] data0 = this._indexDatas;
- String[] labels = this._dateLabels;//数据初始化,自己的数组数据
- Chart.setLicenseCode("ME7YWN3DBFQU2C7MB3971677");//这里是破解
- XYChart c = new XYChart(738, 369, 0xffffff, 0xffffff, 0);
- c.setPlotArea(45, 35, 660, 310, 0xffffff, -1, -1, 0xc0c0c0, -1);
- c.addTitle("走势图", "宋体", 9, 0x000000); //设置标题,java版本中好像没有出现中文件问题,
- c.xAxis().setLabels(labels);
- LineLayer layer = c.addLineLayer();
- layer.addDataSet(data0, 0xcf4040, "Peak").setDataSymbol(Chart.DiamondSymbol, 9);
- layer.setDataLabelFormat("{value|2,.}");
- Image img = c.makeImage();
- BufferedImage bImg = new BufferedImage(738, 369, BufferedImage.TYPE_INT_ARGB);
- Graphics2D biContext = bImg.createGraphics();
- biContext.drawImage(img, 0, 0, null);
- try {
- ImageIO.write((RenderedImage)img ,"jpg",new File("d:\\a.jpg")); //生成图片
- System.out.println("create billdiscountgraphics.jpg successfully.");
- } catch (FileNotFoundException exx) {
- System.out.println("error---[createChart]:" + exx.getMessage());
- } catch (IOException ex) {
- System.out.println("error---[createChart]:" + ex.getMessage());
- } catch (Exception e) {
- System.out.println("error---[createChart]:" + e.getMessage());
- }
asp版:
- '图片生成
- response.Charset="GBK"
- data0=new Array(1,2,3)
- labels=new Array(1,2,3)//数据自己初始化
- Set cd = CreateObject("ChartDirector.API")
- cd.setLicenseCode("ME7YWN3DBFQU2C7MB3971677")//这里是破解
- Set c = cd.XYChart(738, 369, &Hffffff, &Hffffff, 0)
- Call c.setPlotArea(45, 36, 660, 310, &Hffffff, -1, -1, &Hc0c0c0, -1)
- Call c.addTitle("走势图","simsun.ttc", 9, &H000000 )//设置标题,有中文件问题,不要用宋休等,系统找不到
- Call c.xAxis().setLabels(labels)
- Set layer = c.addLineLayer()
- Call layer.addDataSet(data0, &Hcf4040, "Peak").setDataSymbol(cd.DiamondSymbol, 9)
- Call layer.setDataLabelFormat("{value|2,.}")
- ' Output the chart
- 'Response.ContentType = "image/jpg"
- p_true=c.makeChart("D:\a.jpg") //生成图片
- 'Response.End
大家应该很明白了吧?
响搜索引擎优化的几大因素分析
搜索引擎是以用户体验为中心的,影响搜索引擎的因素其实就是影响客户浏览的因素,所以我们要从客户的浏览习惯并从技术层面增加适合搜索引擎索引的因素,但也要控制好度,这个度没有统一的标准,只能靠多调查多实验多分析:
一、堆砌关键词
为了提高关键词密度而在网页中过份堆砌关键词,这种靠提高网页针对关键词的相关度已经不太适用现在的搜索引擎。随着搜索引擎算法的改进,关键词密度已经不是一个重要的因素,操作不当有可能还会被处罚。
二、大量的网站内容均为复制
只有网站结构附合SEO标准,但内容均为复制,自己原创内容极少。这样搜索引擎在辨认来源会是一个很大的问题。一旦搜索引擎得到确认,那么整个网站在搜索引擎中的排名会受到相当大的影响。而且还会涉及到版权问题。
三、网站链接到被惩罚的网站
要时刻注意和你互连的网站是否被惩罚,链接到被惩罚的网站有可能遭受到连带的惩罚。简单来看,从它的Site:域名和pagerank是否为0可以 很容易看出来。但为了避免不必要的风险,选择外部连结的网站是很重要的。那些自动交换链接,大规模交换链接很容易出问题,人工有选择性的交换始终是一个稳 固妥当的办法。
四、SPAM 导入链接
通过程序自动发布本身网站连结到部博客或者BBS,或者通过程序大量创建毫无意义的博客,如此可以迅速获得大量的外部连结。此种做法被普遍认为可以让搜索引擎快速收录并提升搜索引擎排名,且搜索引擎没有办法确认此为有效连接。但只要被抓到一次,你的网站很可能就从此消失。
java获得当前系统内存及硬盘使用情况
啥也不说了直接看代码:
- import java.lang.management.ManagementFactory;
- import com.sun.management.OperatingSystemMXBean;
- public class Test {
- public static void main(String[] args) {
- OperatingSystemMXBean osmb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
- System.out.println("系统物理内存总计:" + osmb.getTotalPhysicalMemorySize() / 1024 / 1024 + "MB");
- System.out.println("系统物理可用内存总计:" + osmb.getFreePhysicalMemorySize() / 1024 / 1024 + "MB");
- }
- }
ManagementFactory.getOperatingSystemMXBean()返回的是java.lang.management里面的OperatingSystemMXBean ;
我们要用的是com.sun.management.OperatingSystemMXBean;
在java类库中可以查到:
public abstract Interface com.sun.management.OperatingSystemMXBean extends java.lang.management.OperatingSystemMXBean
所以我们可以强制转换一下。
jdk6.0下的磁盘使用情况例子:
- import java.io.File;
- /**
- *
- * jdk6.0下的磁盘使用情况例子
- */
- public class Diskfree {
- public static void main(String[] args) {
- File[] roots = File.listRoots();//获取磁盘分区列表
- for (File file : roots) {
- System.out.println(file.getPath() + "信息如下:");
- System.out.println("空闲未使用 = " + file.getFreeSpace() / 1024 / 1024 / 1024 + "G");//空闲空间
- System.out.println("已经使用 = " + file.getUsableSpace() / 1024 / 1024 / 1024 + "G");//可用空间
- System.out.println("总容量 = " + file.getTotalSpace() / 1024 / 1024 / 1024 + "G");//总空间
- System.out.println();
- }
- }
- }
Java获取操作系统信息
先看代码:
- import java.util.Properties;
- Properties props=System.getProperties(); //获得系统属性集
- String osName = props.getProperty("os.name"); //操作系统名称
- String osArch = props.getProperty("os.arch"); //操作系统构架
- String osVersion = props.getProperty("os.version"); //操作系统版本
或:
- String osName = System.getProperty("os.name"); //操作系统名称
- String osArch = System.getProperty("os.arch"); //操作系统构架
- String osVersion = System.getProperty("os.version"); //操作系统版本
public static String getProperty(String key)
键 相关值的描述
java.version Java 运行时环境版本
java.vendor Java 运行时环境供应商
java.vendor.url Java 供应商的 URL
java.home Java 安装目录
java.vm.specification.version Java 虚拟机规范版本
java.vm.specification.vendor Java 虚拟机规范供应商
java.vm.specification.name Java 虚拟机规范名称
java.vm.version Java 虚拟机实现版本
java.vm.vendor Java 虚拟机实现供应商
java.vm.name Java 虚拟机实现名称
java.specification.version Java 运行时环境规范版本
java.specification.vendor Java 运行时环境规范供应商
java.specification.name Java 运行时环境规范名称
java.class.version Java 类格式版本号
java.class.path Java 类路径
java.library.path 加载库时搜索的路径列表
java.io.tmpdir 默认的临时文件路径
java.compiler 要使用的 JIT 编译器的名称
java.ext.dirs 一个或多个扩展目录的路径
os.name 操作系统的名称
os.arch 操作系统的架构
os.version 操作系统的版本
file.separator 文件分隔符(在 UNIX 系统中是“/”)
path.separator 路径分隔符(在 UNIX 系统中是“:”)
line.separator 行分隔符(在 UNIX 系统中是“/n”)
user.name 用户的账户名称
user.home 用户的主目录
user.dir 用户的当前工作目录
MyEclipse7.5英文正式版
MyEclipse7.5英文正式版下载地址:http://www.accptech.com/plus/download.php?open=0&aid=957&cid=3
破解:
编译运行如下代码
- /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- public class MyEclipseGen {
- private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";
- public String getSerial(String userId, String licenseNum) {
- java.util.Calendar cal = java.util.Calendar.getInstance();
- cal.add(1, 3);
- cal.add(6, -1);
- java.text.NumberFormat nf = new java.text.DecimalFormat("000");
- licenseNum = nf.format(Integer.valueOf(licenseNum));
- String verTime = new StringBuilder("-").append(
- new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime())).append("0").toString();
- String type = "YE3MP-";
- String need = new StringBuilder(userId.substring(0, 1)).append(type).append("300").append(licenseNum).append(verTime).toString();
- String dx = new StringBuilder(need).append(LL).append(userId).toString();
- int suf = this.decode(dx);
- String code = new StringBuilder(need).append(String.valueOf(suf)).toString();
- return this.change(code);
- }
- private int decode(String s) {
- int i;
- char[] ac;
- int j;
- int k;
- i = 0;
- ac = s.toCharArray();
- j = 0;
- k = ac.length;
- while (j < k) {
- i = (31 * i) + ac[j];
- j++;
- }
- return Math.abs(i);
- }
- private String change(String s) {
- byte[] abyte0;
- char[] ac;
- int i;
- int k;
- int j;
- abyte0 = s.getBytes();
- ac = new char[s.length()];
- i = 0;
- k = abyte0.length;
- while (i < k) {
- j = abyte0[i];
- if ((j >= 48) && (j <= 57)) {
- j = (((j - 48) + 5) % 10) + 48;
- } else if ((j >= 65) && (j <= 90)) {
- j = (((j - 65) + 13) % 26) + 65;
- } else if ((j >= 97) && (j <= 122)) {
- j = (((j - 97) + 13) % 26) + 97;
- }
- ac[i] = (char) j;
- i++;
- }
- return String.valueOf(ac);
- }
- public MyEclipseGen() {
- super();
- }
- public static void main(String[] args) {
- try {
- System.out.println("please input register name:");
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- System.in));
- String userId = null;
- userId = reader.readLine();
- MyEclipseGen myeclipsegen = new MyEclipseGen();
- String res = myeclipsegen.getSerial(userId, "5");
- System.out.println("Serial:" + res);
- reader.readLine();
- } catch (IOException ex) {
- }
- }
- }
运行该代码,在控制台中会出现:
please input register name:
×××××(你的name,随便什么)
即生成序列号: ××××× ××××× ×××××…
确实不错的反编译工具,比小颖还爽
上周五要反编译一个class文件,主要是为了区别是否和我最新的java类一至,我以前一直用小颖感觉还可以,不过它很让我失望,反不出来.沈工用了一个很小的反编译工具,轻松搞定,从那一刻,我就喜欢上它了...
刚刚在网上瞎转,忽然看到一篇反编译工具的blog,尝试的心态下了看看,没想到就是我所喜欢的那个,尝试的打开了N个class,效果很满意.这款反编译器叫 “Java Decompiler”, 由 Pavel Kouznetsov开发,目前最新版本为0.2.6.
它由 C++开发,并且官方可以下载 windows、linux和苹果Mac Os三个平台的可执行程序。
其有下面几个功能:
1. 支持对整个Jar文件进行反编译,并本源代码可直接点击进行相关代码的跳转
2. 支持众多Java编译器的反编译(支持泛型, Annotation和enum枚举类型)
- jdk1.1.8
- jdk1.3.1
- jdk1.4.2
- jdk1.5.0
- jdk1.6.0
- jikes-1.22
- harmony-jdk-r533500
- Eclipse Java Compiler v_677_R32x, 3.2.1 release
- jrockit90_150_06
图示:

3. 快速查找源文件功能(Ctrl+Shift+T)
4. 安装方便.只有600K,直接运行即可。
5. 支持文件的拖放功能,源代码高亮显示
反编的效果很不错,值得我们收藏一用...
小心陷阱:Can’t connect to X11 window server using ‘:0.0′ as the value of the DISPLAY variable.
今天遇到了一个这样的问题Can’t connect to X11 window server using ‘:0.0′ as the value of the DISPLAY variable.我用的linux直接用java命令行执行,本来我以为是数据问题,因为在我的windows下没有问题,所以先把数据校对了一下,无果...
后来网上搜了一下,才明白:因为用到了图形处理,java程序会去寻找linux上的图形界面是否启动
解决方法:不让java寻找linux图形界面即可,在java 启动时加选项java -Djava.awt.headless=true
如果是tomcat,在/usr/local/tomcat/bin/catalina.sh中修改,请参照:http://blog.javaflag.com/blog/?p=35
两上java视频教程
前两天在verycd上找了两上java的视频教程,一个基于jdk5一个基于jdk6的,我正在下,还没有来得急看,应该是不错,我是喜欢看别人的视频教程,这样有的东西一看就会,当然也要主意自己的coding能力...不能光看不练...
http://www.verycd.com/topics/93279/
这个是尚学堂科技.马士兵的
http://www.verycd.com/topics/215898/
这个是v512工作室.刘伟的
用emule下,thunder好像也可以下这样的了...
getOutputStream() has already been called for this response
通常下载东西的时候,我们只href链接到这个文件就行了,如果浏览器识别这个后缀,它会默认打开,如果不被识别会下载,如果我们想统一的下载还得找其它的解决方案,比如我用的jspsmartupload的downloadFile,示例代码:
- com.jspsmart.upload.SmartUpload su = new com.jspsmart.upload.SmartUpload();
- // 初始化
- su.initialize(pageContext);
- su.setContentDisposition(null);
- // 设定contentDisposition为null以禁止浏览器自动打开文件,
- //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
- //doc时,浏览器将自动用word打开它。扩展名为pdf时,
- //浏览器将用acrobat打开。
- su.downloadFile(path);//path为绝对路径
当然为了安全,你要在下载之前判断file.exists()
你也可以写个stream,自己处理:
在此你会经常发现这样的一个错误:
- java.lang.IllegalStateException: getOutputStream() has already been called for this response
- org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:599)
- org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:163)
- org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:122)
- org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115)
- org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190)
- org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
- org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
- org.apache.jsp.info.download_jsp._jspService(download_jsp.java:106)
- org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
- org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
- org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
- org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
网上找了很多资料大致意思是:
在tomcat中jsp编译成servlet之后在函数_jspService(HttpServletRequest request, HttpServletResponse response)的最后
有一段这样的代码
finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
这里是在释放在jsp中使用的对象,会调用response.getWriter(),因为这个方法是和
response.getOutputStream()相冲突的!所以会出现以上这个异常。
解决方法很简单:
如果是在jsp页面,使用以下代码:
- out.clear();
- out=pageContext.pushBody();
如果写成一个类的话,调用pageContext参数,在jsp里面,它是一个对象 ,因此在调用参数时加上类型Page(大写),引入的包为import javax.servlet.jsp.*(eclipse自带);
因此在java类里代码如下:
- JspWriter out=page.getOut();//此处的out属于import javax.servlet.jsp.JspWriter方法的实例。
- out.clear();
- out=page.pushBody();
- response.flushBuffer();
另外PageContex与ServletContext是不同的,PageContext就是JSP中的page,ServletContext就是JSP中的application,两者的scope不一样。

