在不同java上传图片到服务器器上时间格式不一样 java时间格式化问题?

Java时间的若干问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Java时间的若干问题
&&Java时间的若干问题
你可能喜欢随笔分类(11)
随笔档案(19)
积分与排名
阅读排行榜
评论排行榜安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&一个关于不同时区的日期显示问题 - ITeye问答
我有一个extjs 的Grid, 显示的是后台数据库的一个Stored Procedure的输出值. 其中的一项的是日期(Date), 比如, 一个日期是: (应该就是:
然后在前台的Extjs解析这个值, 显示在前台, 应该也是:
但如果时区不一样的话, 就会有问题, 比如后台的Stored Procedure输出的还是日期: , 存在系统中就仍然是:
( 000000), 但如果这个用户的时区正好是迟一个小时的话, 那么现在javascrip会读本地的时间, 把 000000 北京时间)翻译成: 10/03/ (晚一小时的地方的时间), 从而前台显示时成了10/03/2010
我的问题是, 对这种普遍性的问题, 应该怎么办? 应该
1.从后台Stored Procedure该,
2.还是改前台的extjs (比如: 如果前台extjs的JsonReader是:
columns:[
& {
& "header": ...
...
& "renderer": Ext.util.Format.dataRender('d-M-Y');
&& }
那么把它变成一个字符串. 具体怎么做我也不知道.
希望大家能指点一下怎么样解决这个问题. 谢谢.
是不是把dateReader, 几天就回的. 很麻烦.
问题补充:多谢回复. 就是可给的分太少了.
假设我知道服务器端的时区, 而我想在客户端用服务器的时区显示, 我应该怎么写这个renderer自定义函数呢? 能给点提示吗?
如果我在数据库输出端改成datetime类型, 即提供了time, 会不会有什么简便的方法呢?
另外, 关于d-M-Y, 是我写错了, 应该是: 03-Oct-2010
lizhi92574 写道
你可以在renderer 使用自定义函数解析数据。而不使用dataRender函数解析日期。
renderer :function(v){
& //对v解析并返回
&
}
你使用的是 d-M-Y 格式化 怎么会成 10/03/2010&& 数据格式呢?
问题补充:多谢回复! 怎么页面获取服务器所在时区呢? 有什么办法可以利用数据库的输出时加上服务器的day + time, 从而解决这个问题呢? 谢谢.
clue 写道时间存于数据库中,本身是不包含时区的。
它存储的是以标准时区日凌晨起至某个时间的间隔,当显示给你看时,根据你当前计算机的时区来计算并格式化出来。
你在数据库中看到的时间和页面上看到的时间本质上是一样的,只是时区计算不同而已
JavaScript没有提供时区设置接口,所以如果你想在网页上显示的时区与服务器的相同,可以用以下办法:
1. 服务器返回日期字符串
2. 页面获取服务器所在时区,然后进行转换计算(见例1)
例1:
假如服务器位于+10时区,访问者处于+8时区,那么对于获取到的时间d进行如下处理:
var actualMilliSeconds = d.getTime(); // 标准毫秒数
// getTimezoneOffset获取的是标准时区与本地时区相差的分钟数(标准 - 本地,这里为-8*60=-480)
var localOffset = -d.getTimezoneOffset();
// 假定服务器时区为+10
var serverOffset = 600;
// 修正显示时间
var adjustMilliSeconds = actualMilliSeconds& + (serverOffset - localOffset)*60000;
// 格式化
var adjustDate = new Date(adjustMilliSeconds);
// 输出...
怎么获取服务器的时区要看你后台用的什么语言了,一般这个上网查查到处都有
这里最主要的问题是,你想展示的是哪个时区的时间?也就是说你想以哪个时区为标准?
例如某家公司开通了一个在线咨询聊天室,里面会提示何时开始提供服务(何时开始上班),那这时应该以本地时区为准,因为这样让浏览者很容易识别。比如公司位于美国中部-6时区,早上9点上班。那位于中国+8时区的浏览者看到的是晚上23点开始服务。
再例如一个个人博客,记录这一天内都干了些什么,那这时不管浏览者在何处,都应该以博主的时区进行显示,以便理解事件发生时是一天中的什么时刻。
时区确定下来了,你甚至可以将它作为前端页面的一个常量,假设它以分钟为单位存于全局standardTimeOffset变量中,那renderer就是这样写:
function(d){
&& var ad = d.getTime() + (standardTimeOffset + d.getTimezoneOffset())*60000;
&& return (new Date(ad)).format("d-M-Y");
}
时间存于数据库中,本身是不包含时区的。
它存储的是以标准时区日凌晨起至某个时间的间隔,当显示给你看时,根据你当前计算机的时区来计算并格式化出来。
你在数据库中看到的时间和页面上看到的时间本质上是一样的,只是时区计算不同而已
JavaScript没有提供时区设置接口,所以如果你想在网页上显示的时区与服务器的相同,可以用以下办法:
1. 服务器返回日期字符串
2. 页面获取服务器所在时区,然后进行转换计算(见例1)
例1:
假如服务器位于+10时区,访问者处于+8时区,那么对于获取到的时间d进行如下处理:
var actualMilliSeconds = d.getTime(); // 标准毫秒数
// getTimezoneOffset获取的是标准时区与本地时区相差的分钟数(标准 - 本地,这里为-8*60=-480)
var localOffset = -d.getTimezoneOffset();
// 假定服务器时区为+10
var serverOffset = 600;
// 修正显示时间
var adjustMilliSeconds = actualMilliSeconds& + (serverOffset - localOffset)*60000;
// 格式化
var adjustDate = new Date(adjustMilliSeconds);
// 输出...
你可以在renderer 使用自定义函数解析数据。而不使用dataRender函数解析日期。
renderer :function(v){
& //对v解析并返回
&
}
你使用的是 d-M-Y 格式化 怎么会成 10/03/2010&& 数据格式呢?
已解决问题
未解决问题不同服务器上的Java项目文件同步 解决方案(socket 、http)
时间: 17:23:46
&&&& 阅读:157
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&最近两个项目之间的需要做数据同步,要求是A项目的数据以及图片文件要同步到B项目,首先两个项目都是独立的采集录入信息的项目,数据库数据同步不说了,还有一些图片等文件也得需要同步, 首先想到的是B项目调用A项目的图片路径,因为两个项目的图片文件路径有很多种生成情况,两项目都在运行中,这种图片路径方法就排除了。 后面就想到了两种解决方法:
1 socket 方法 就是在B项目添加侦听 B项目启动时候start, 在A项目中用Client 。
2 在A项目中通过HttpURLConnection模拟post表单提交到B项目对应方法。(个人感觉这种比较好)
HttpURLConnection:
package test.httpUp;
import java.io.ByteArrayOutputS
import java.io.DataOutputS
import java.io.F
import java.io.FileInputS
import java.io.InputS
import java.net.HttpURLC
import java.net.SocketTimeoutE
import java.net.URL;
import java.net.URLE
import java.util.HashM
import java.util.I
import java.util.M
import java.util.S
import javax.imageio.ImageIO;
import javax.imageio.ImageR
import javax.imageio.stream.ImageInputS
public class HttpPostUtil {
String boundary = &--------http&;
Map&String, String& textParams = new HashMap&String, String&();
Map&String, File& fileparams = new HashMap&String, File&();
DataOutputS
public HttpPostUtil(String url) throws Exception {
this.url = new URL(url);
//重新设置要请求的服务器地址,即上传文件的地址。
public void setUrl(String url) throws Exception {
this.url = new URL(url);
//增加一个普通字符串数据到form表单数据中
public void addTextParameter(String name, String value) {
textParams.put(name, value);
//增加一个文件到form表单数据中
public void addFileParameter(String name, File value) {
fileparams.put(name, value);
// 清空所有已添加的form表单数据
public void clearAllParameters() {
textParams.clear();
fileparams.clear();
// 发送数据到服务器,返回一个字节包含服务器的返回结果的数组
public byte[] send() throws Exception {
initConnection();
conn.connect();
} catch (SocketTimeoutException e) {
// something
throw new RuntimeException();
ds = new DataOutputStream(conn.getOutputStream());
writeFileParams();
writeStringParams();
paramsEnd();
InputStream in = conn.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
while ((b = in.read()) != -1) {
out.write(b);
conn.disconnect();
return out.toByteArray();
//文件上传的connection的一些必须设置
private void initConnection() throws Exception {
conn = (HttpURLConnection) this.url.openConnection();
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setConnectTimeout(10000); //连接超时为10秒
conn.setRequestMethod(&POST&);
conn.setRequestProperty(&Content-Type&,
&multipart/form- boundary=& + boundary);
//普通字符串数据
private void writeStringParams() throws Exception {
Set&String& keySet = textParams.keySet();
for (Iterator&String& it = keySet.iterator(); it.hasNext();) {
String name = it.next();
String value = textParams.get(name);
ds.writeBytes(&--& + boundary + &\r\n&);
ds.writeBytes(&Content-Disposition: form- name=\&& + name
+ &\&\r\n&);
ds.writeBytes(&\r\n&);
ds.writeBytes(encode(value) + &\r\n&);
//文件数据
private void writeFileParams() throws Exception {
Set&String& keySet = fileparams.keySet();
for (Iterator&String& it = keySet.iterator(); it.hasNext();) {
String name = it.next();
File value = fileparams.get(name);
ds.writeBytes(&--& + boundary + &\r\n&);
ds.writeBytes(&Content-Disposition: form- name=\&& + name
+ &\&; filename=\&& + encode(value.getName()) + &\&\r\n&);
ds.writeBytes(&Content-Type: & + getContentType(value) + &\r\n&);
ds.writeBytes(&\r\n&);
ds.write(getBytes(value));
ds.writeBytes(&\r\n&);
//获取文件的上传类型,图片格式为image/png,image/jpg等。非图片为application/octet-stream
private String getContentType(File f) throws Exception {
return &application/octet-stream&;
// 此行不再细分是否为图片,全部作为application/octet-stream 类型
ImageInputStream imagein = ImageIO.createImageInputStream(f);
if (imagein == null) {
return &application/octet-stream&;
Iterator&ImageReader& it = ImageIO.getImageReaders(imagein);
if (!it.hasNext()) {
imagein.close();
return &application/octet-stream&;
imagein.close();
return &image/& + it.next().getFormatName().toLowerCase();//将FormatName返回的值转换成小写,默认为大写
//把文件转换成字节数组
private byte[] getBytes(File f) throws Exception {
FileInputStream in = new FileInputStream(f);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] b = new byte[1024];
while ((n = in.read(b)) != -1) {
out.write(b, 0, n);
in.close();
return out.toByteArray();
//添加结尾数据
private void paramsEnd() throws Exception {
ds.writeBytes(&--& + boundary + &--& + &\r\n&);
ds.writeBytes(&\r\n&);
// 对包含中文的字符串进行转码,此为UTF-8。服务器那边要进行一次解码
private String encode(String value) throws Exception{
return URLEncoder.encode(value, &UTF-8&);
public static void main(String[] args) throws Exception {
HttpPostUtil u = new HttpPostUtil(&http://xxxxxx.action&);
u.addTextParameter(&path&, &qs/&);
u.addTextParameter(&fileName&, &111.jpg&);
u.addFileParameter(&picFile&, new File(
&D://272.jpg&));
u.addTextParameter(&text&, &utf-8&);
byte[] b = u.send();
String result = new String(b);
System.out.println(result);
=====================
socket&& client
package test.
import java.io.DataOutputS
import java.io.F
import java.io.FileInputS
import java.io.IOE
import java.net.InetSocketA
import java.net.S
import java.net.URL;
* 文件发送客户端主程序
* @author admin_Hzw
public class BxClient {
* 程序main方法
* @param args
* @throws IOException
public static void main(String[] args) throws IOException {
int length = 0;
double sumL = 0 ;
byte[] sendBytes =
Socket socket =
DataOutputStream dos =
FileInputStream fis =
boolean bool =
File file = new File(&d:/272.jpg&); //要传输的文件路径
long l = file.length();
socket = new Socket();
socket.connect(new InetSocketAddress(&192.168.1.110&, 8877));
dos = new DataOutputStream(socket.getOutputStream());
fis = new FileInputStream(file);
sendBytes = new byte[1024];
while ((length = fis.read(sendBytes, 0, sendBytes.length)) & 0) {
System.out.println(&已传输:&+((sumL/l)*100)+&%&);
dos.write(sendBytes, 0, length);
dos.flush();
//虽然数据类型不同,但JAVA会自动转换成相同数据类型后在做比较
if(sumL==l){
}catch (Exception e) {
System.out.println(&客户端文件传输异常&);
e.printStackTrace();
} finally{
if (dos != null)
dos.close();
if (fis != null)
fis.close();
if (socket != null)
socket.close();
System.out.println(bool?&成功&:&失败&);
}socket server
&listener&
&listener-class&XXX.web.listener.SocketServiceLoader&/listener-class&
&/listener&
import javax.servlet.ServletContextE
import javax.servlet.ServletContextL
public class SocketServiceLoader implements ServletContextListener { //socket server 线程
private SocketThread socketT
public void contextDestroyed(ServletContextEvent arg0) {
if(null!=socketThread && !socketThread.isInterrupted())
socketThread.closeSocketServer();
socketThread.interrupt();
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
if(null==socketThread)
//新建线程类
socketThread=new SocketThread(null);
//启动线程
socketThread.start();
import java.io.IOE
import java.net.ServerS
import java.net.S
public class SocketThread extends Thread{
private ServerSocket serverSocket =
public SocketThread(ServerSocket serverScoket){
if(null == serverSocket){
this.serverSocket = new ServerSocket(8877);
System.out.println(&socket start&);
} catch (Exception e) {
System.out.println(&SocketThread创建socket服务出错&);
e.printStackTrace();
public void run(){
while(!this.isInterrupted()){
Socket socket = serverSocket.accept();
if(null != socket && !socket.isClosed()){
//处理接受的数据
new SocketOperate(socket).start();
socket.setSoTimeout(30000);
}catch (Exception e) {
e.printStackTrace();
public void closeSocketServer(){
if(null!=serverSocket && !serverSocket.isClosed())
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
import java.io.DataInputS
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import java.net.S
import java.util.R
public class SocketOperate extends Thread{
public SocketOperate(Socket socket) {
this.socket=
@SuppressWarnings(&unused&)
public void run()
System.out.println(&开始监听...&);
* 如果没有访问它会自动等待
System.out.println(&有链接&);
receiveFile(socket);
} catch (Exception e) {
System.out.println(&服务器异常&);
e.printStackTrace();
/*public void run() {
* 接收文件方法
* @param socket
* @throws IOException
public static void receiveFile(Socket socket) throws IOException {
byte[] inputByte =
int length = 0;
DataInputStream dis =
FileOutputStream fos =
String filePath = &D:/temp/&+new Random().nextInt(10000)+&.jpg&;
dis = new DataInputStream(socket.getInputStream());
File f = new File(&D:/temp&);
if(!f.exists()){
f.mkdir();
* 文件存储位置
fos = new FileOutputStream(new File(filePath));
inputByte = new byte[1024];
System.out.println(&开始接收数据...&);
while ((length = dis.read(inputByte, 0, inputByte.length)) & 0) {
fos.write(inputByte, 0, length);
fos.flush();
System.out.println(&完成接收:&+filePath);
} finally {
if (fos != null)
fos.close();
if (dis != null)
dis.close();
if (socket != null)
socket.close();
} catch (Exception e) {
e.printStackTrace();
标签:&&&&&&&&&&&&&&&原文:http://blog.csdn.net/qiaoshuai0920/article/details/
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!}

我要回帖

更多关于 java上传文件到服务器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信